Optimiser les tableaux en HTML
Il est préférable d'éviter l'utilisation massive de tableaux, en privilégiant les div et CSS2, mais ces dernières années, nous avons donc pu observer une utilisation de plus en plus importante des tableaux, car ils sont des moyens de mise en page utilisés principalement par les éditeurs WYSIWYG. La page est donc souvent constituée d'un tableau général qui comporte une multitude d'autres tableaux.
Le navigateur doit analyser les différents tableaux afin de calculer leurs tailles souvent dynamiques, en fonction du contenu des cellules, ou des rapports entre les tableaux eux-mêmes. Si les cellules comportent des images, chaque affichage nécessite une requête http.
Nous pouvons dès lors comprendre qu'ici aussi il est possible d'économiser la bande passante.
Les balises de tableaux en HTML
Une manière de réduire les temps de calculs des affichages de tableaux est de fournir un maximum d'informations au navigateur.
Cette technique peut sembler contradictoire avec la chasse au moindre bit superflu, mais le gain de temps lors des nombreux calculs est plus important que la place occupée par les balises que nous emploierons pour définir nos tableaux.
Nous devrons donc nous efforcer de travailler avec des tableaux de tailles fixes afin que le navigateur puisse traiter le tableau en une seule passe.
Les goupes de lignes tbody, thead et tfoot
- thead : définit un groupe de lignes d'en-tête.
- tfoot : définit un groupe de lignes de pied de page. Nous devons veiller à ce que le groupe tfoot se situe avant les tbody, pour que le navigateur puisse traiter le pied de page avant même d'avoir terminé de traiter les différents tbody.
- tbody : groupe de lignes. Nous pouvons déterminer plusieurs tbody pour un même tableau.
Code source du tableau HTML
Résultat
...Informations d'en-tête... |
...Informations de pied de page... |
...ligne 1 du bloc 1... |
...ligne 2 du bloc 1... |
...ligne 1 du bloc 2... |
...ligne 2 du bloc 2... |
Les goupes de colonnes: colgroup
- colgroup : définit un groupe de colonnes (HTML 4.0) pour lequel nous pouvons renseigner la largeur (width) et le nombre (span).
- col : définit une colonne individuelle (HTML 3.2). Cette définition annule la définition de groupe pour cette colonne.
Au fond de la cellule…
Il est possible d'insérer une image dans une cellule, ou comme élément de fond.
Nous pouvons travailler avec des fonds colorés au lieu d'utiliser une image, soit en déclarant la couleur de fond en attribut de la cellule, ou mieux encore, en utilisant une feuille de style.
Pseudo tables HTML
Bien que généralement utilisés pour disposer les éléments sur la page (layout), les tableaux sont normalement réservés à un usage où la sémantique correspond à l'affichage de données comme dans Lotus 1-2-3, ou Microsoft Excel.
Il est tout à fait possible de déléguer la présentation aux feuilles de style afin de reproduire un effet de tableau si les données ne nécessitent pas une réelle utilisation de tableur.
Génération de Pseudo tables HTML
Modification du 31/07/2003
Le code utilisé dans l'exemple ci-dessus est à présent généré depuis une classe PHP.Pour ceux qui désirent en savoir plus sur la génération des tableaux sur l'infobrol, voici le code que j'utilise…
Code php (Appels à la classe PseudoTable) (17 lignes)
$pseudoTable = new PseudoTable('testPseudoTable1', 'test de tableau sans balise <table>'); // for($rowCnt=0; $rowCnt<10; $rowCnt++){ //fill all cells with a given format, calling methods given as array parameter } //collapse from row 2 column 1, to row 5 column 1 (0 based index) keeping the first cell value, and apply 'hi' class $pseudoTable->collapse(2, 1, 5, 1, 'hi'); //collapse from row 2 column 4, to row 6 column 4 $pseudoTable->collapse(2, 4, 6, 4); //collapse from row 7 column 1, to row 7 column 2 $pseudoTable->collapse(7, 1, 7, 2); //use alternate color between odd and even rows $pseudoTable->setAlternate(true); // echo $pseudoTable;
Ce qui produit donc le code suivant :
Code HTML (Code HTML d'une PseudoTable) (1 ligne)
<div class="brol-pseudotable-wrapper brol-fullwidth"><div class="brol-caption" style="min-width:41em;"><span>test de tableau sans balise <table></span><span class="tabEnd"> </span></div><div class="brol-pseudotable brol-fullwidth" id="testPseudoTable1"><div class="brol-pseudotgroup"><div class="brol-pseudorow td2"><span class="brol-pseudocell-th ta-c">C0 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C1 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C2 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C3 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C4 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td"><span class="brol-pseudocell ta-l">R1C0 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R1C1 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R1C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R1C3 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R1C4 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R1C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td2"><span class="brol-pseudocell ta-l">R2C0 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R2C1 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R2C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R2C3 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R2C4 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R2C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td"><span class="brol-pseudocell ta-l">R3C0 <span class="noDisp">| </span></span><span class="brol-pseudocell brol-rowcollapsed hi">R3C1 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R3C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R3C3 <span class="noDisp">| </span></span><span class="brol-pseudocell brol-rowcollapsed td">R3C4 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R3C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td2"><span class="brol-pseudocell ta-l">R4C0 <span class="noDisp">| </span></span><span class="brol-pseudocell hi brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R4C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R4C3 <span class="noDisp">| </span></span><span class="brol-pseudocell td brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R4C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td"><span class="brol-pseudocell ta-l">R5C0 <span class="noDisp">| </span></span><span class="brol-pseudocell hi brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R5C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R5C3 <span class="noDisp">| </span></span><span class="brol-pseudocell td brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R5C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td2"><span class="brol-pseudocell ta-l">R6C0 <span class="noDisp">| </span></span><span class="brol-pseudocell hi brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R6C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R6C3 <span class="noDisp">| </span></span><span class="brol-pseudocell td brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R6C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td"><span class="brol-pseudocell ta-l">R7C0 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R7C1 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R7C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R7C3 <span class="noDisp">| </span></span><span class="brol-pseudocell td brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R7C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td2"><span class="brol-pseudocell ta-l">R8C0 <span class="noDisp">| </span></span><span class="brol-pseudocell brol-colcollapsed ta-l">R8C1 <span class="noDisp">| </span></span><span class="brol-pseudocell brol-empty"> <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R8C3 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R8C4 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R8C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td"><span class="brol-pseudocell ta-l">R9C0 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R9C1 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R9C2 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R9C3 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R9C4 <span class="noDisp">| </span></span><span class="brol-pseudocell ta-l">R9C5 <span class="noDisp">| </span></span></div><div class="brol-pseudorow td2"><span class="brol-pseudocell-th ta-c">C0 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C1 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C2 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C3 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C4 <span class="noDisp">| </span></span><span class="brol-pseudocell-th ta-c">C5 <span class="noDisp">| </span></span></div></div></div></div>
Nous pouvons remarquer que ce code n'est pas du tout optimisé au niveau de la quantité de caractère qu'il génère, mais il a le mérite de ne pas laisser la responsabilité de la présentation à la page elle-même. Il suffit de modifier la classe PseudoTable pour adapter toutes les pages.
Version en cache
20/11/2024 14:05:12 Cette version de la page est en cache (à la date du 20/11/2024 14:05:12) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 21/07/2002, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/html-optimisation-tableaux.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.