Aller au contenu principal

Performance

  • De manière générale, limiter l'utilisation d'éléments, et les optimiser et les compresser.
  • Les émissions carbone d'un site viennent d'une mauvaise performance
  • Le rendu est plus lent sur mobile

Fonctionnement

  • Les navigateurs web ont (à peu près) deux fils d'exécution pour le rendu :
    • Le principal (main) => se charge de calculer les règles css, la mise en page (layout/reflow), calculer chaque pixels (painting/draw)
    • Celui de composition (Compositor) => se charge de dessiner les pixels sur l'écran
  • L'idéal est d'avoir 16ms de chargement max pour une frame (pour garder une fréquence d'image à 60fps)
  • Au premier rendu d'un élément, on va :
    • faire sur le fil main un layout > paint > qui rend une image bitmap
    • puis sur le fil Compositor : chargement en mémoire > composition
    • Si on fait une animation sur la taille d'un élément, on va redéclencher la mise en page (relayout)
    • Mais lorsqu'on anime une transformation sur un élément, on reste dans la composition
  • Debugger les reflow / repaint
    • Dans la console on peut détecter les reflows (firefox)
    • On peut détecter les repaints (chrome) > rendering, paint flashing

Reflow et repaint

  • Reflow = une opération qui vient changer le layout d'une partie ou toute la page. Exemple : changement des dimensions d'un élément, mise à jour de sa position left,... Les reflow sont coûteux car on force le navigateur à recalculer la hauteur/largeur/position des éléments dans la page.
  • Repaint = similaire au reflow (ils forcent le navigateur à re-render une partie du document). Mais ils n'affectent pas les dimensions ou positions des éléments ! Exemple : changement de la couleur du bouton au hover.
  • Ce qui déclenche un reflow ou repaint :
    • Le chargement initial d'une page
    • Les opérations sur le DOM (exemple : ajout ou suppression d'élément)
    • Un changement sur une propriété qui affecte la dimension/visibilité/position d'un élément (que ça soit via du js ou une animation css)

Performance HTML

  • Texte => compression (brotli ou zopfli)
  • Images
    • "Decoding and rendering images is very resource-intensive" => réduire le nombre d'images, la qualité et la quantité
    • Lighthouse (google) recommande de servir les images dans des formats next gen pour réduire la taille de la donnée qui doit être téléchargée. Mais les nouveaux formats sont plus lent à décoder, surtout sur mobile. => à vérifier : probablement mieux de mettre plus de temps à décoder que d'envoyer moins de donnée ?
    • Quel format ? format WebP
  • Polices
    • Utiliser moins de polices
    • optimisées : WOFF2 de préférence

Sources

  • Livre "CSS Master"