Web performance, concevoir pour les connexions faibles et les appareils lents
La web performance ou la vitesse perçue de chargement perçu un site web sont des indicateurs très suivis en e-commerce. Ils ont une incidence directe sur le taux de rebond (personne qui part du site sans le consulter) et l’expérience d’usage. Comment s’assurer de la qualité de sa web performance ?
- La web performance, qu'est-ce que c'est ?
- Comment améliorer la web performance ?
- Temps de connection
- Traitement serveur
- Affichage et ressources
- Optimiser et prioriser le chargement des éléments de la page
- Réduire le poids des images
- Afficher les chargements
- Mesurer la web performance
- Water fall
- Les indicateurs Core Vitals
La web performance, qu'est-ce que c'est ?
En premier lieu, c’est la perception de rapidité d’un site web lorsque
je lui demande une action : afficher une page ou ouvrir une modale.
Cette dernière devant de plusieurs facteurs : la rapidité de l’appareil,
la quantité du réseau (wifi, 4g, 3g), la complexité de la page, son poids,
le nombre de requêtes et le temps de traitement du ou des serveurs.
Comment améliorer la web performance ?
Pour améliorer cette chaîne, il faut s’intéresser à chaque maillon.
Quelles sont les étapes de la demande à l'affichage de ma page web ?
Si je souhaite afficher le site de ma ville, je vais saisir son adresse dans
la barre de mon navigateur : ville-de-dieppe.fr. ma requête s'en va trouver
le serveur avec lequel est hébergé le site de ma ville disons le serveur
Ovh 34.45.24.88 à Gravelines.
Ce dernier va m'envoyer constituer document rempli de balise appelé Html
avec ces bases de données (comme la liste des dernières actualités).
Une fois réceptionné, mon navigateur va chercher chaque ressource de ma page
comme les images, les vidéos et police d'écriture ou les scripts pour rendre
ma page interactive.
Temps de connection
Sélectionner un serveur proche de mon audience est un point à ne pas manqué, cela permet de réduire la latance. Si mon serveur est à Hong-Kong, tous mes usagers vont devoir établir une connection avec un serveur lointain. Cela va avoir pour coonséquence de passer par plusieurs intermédiaire et d'augementer le risque que des packet de donnée transféert soit perdu et ralentise le temps perçu de chargement.
Traitement serveur
Le serveur est chargé de constituer et restitier une page html. Pour ce faire elle dispose souvant de base de données, ce sont des tableux d'information comme la liste des articles de blog, la liste des utiliseurs et leur préférences ou les produits d'une boutique. Ces dernières peuvent-être complexe si ma boutique à plus de 20k références.
Pour s'assuer de sa rapidité d'exécution, il faut choisir un serveur performant avec des disque solide rapide. Il faut également réduire et optimiser sa base de donnée : effacer les lignes obsletes, et mettre en mémoire les résultat de recherche fréquent pour limiter les calcules redondnat.
Affichage et ressources
Limiter le nombre de serveurs à appeler Réduire le poids des ressources Simplifier la page web (DOM) et limiter le nombre de calculs serveur (sobriété, cache)
Limiter et optimiser les javascripts
Un fichier javascript sert à ajouter de l'interation dans les pages web : ouvrir une modale, afficher une carte afficher des diagrammes interactifs. Ces scripts on une pars très importante dans la perception du chargement d'une page web. Ils ont besoin d'être téléchargés, parcours et exécutés.
Leurs utilistions et très présente : script d'analyse d'audience, technologie de génération de page, fil d'actualités infini... Les sites en sont devenu très lourd et complexe. Limiter l'usage de ce dernier est possible et souhaitable.
- Utiliser des composants natifs. De nombreux éléments interactifs natif au Html5 exite comme l'accordéon, la modale ou la liste déroulante. Les utiliser, réduit la complexité et leurs réactivités Voir le projet de composant natif Dragon.css
- Réduire la liste d'outils analytics et de librairies JavaScript
- Ne pas utiliser de technologie de génération de site javascript coté utilisateur(client side rendering) comme Next, React, Angular ou Vue. Elles sont souvent des phénomènes de mode, leurs recours à de nombreuses bibliothèques de code et leur re-génération sur l'appareil de l'utilisateur portent préjudice à la rapidité d'une site web. C'est d'ailleurs pour cela que Netflix à décider de se séparer de React sur ces pages d'attérisages.
- Optimiser le chargement et l'éxécution du javascript (et de certaines autres ressources) :
Attribut | Usage | Schéma |
---|---|---|
rel="preload" | Charger les ressources essentielles, comme la police d'affichage | |
async | Télécharger les scripts en arrière-plan et l’exécuter pendant le chargement de la page : Script externe comme ceux d'analyses d'audiences | |
defer | Exécuter le script après le changement de la page. Pour les fonctionnalités occasionnelles. | |
rel="prefetch" | Charger des ressources pour la page suivante. | |
rel="preconnect" | Se pré-connecter au serveur qui détiens des ressources de la page |
Optimiser et prioriser le chargement des éléments de la page
Pour anticiper les décalages de la mise en page liée au chargement
des images utiliser les proprités css ratio :
style="aspect-ratio: 16 / 9;"
Pour optimiser le chargement de la ressources prinicipale au dessus
le la ligne de flotaison placer l'attribut
fetchpriority="high"
dans la balise de l'élément.
Minifier les fichiers de style (Css) et JavaScript (Js) en enlevent les commentaires, retours à la ligne et les espaces. Avec des outils comme Minifier org ces fichiers peuvent perdre du poids en abarquant les mêmes fonctionnalités.
Utiliser le chargement pareseux avec l'attribut loading="lazy"
pour
toutes les images et les contenus embarqués en dessous de la ligne de flotaison.
Réduire le poids des images
Le format adapté
Choisir un format d'image c'est choisir l'algorithme qui simplifira l'image pour enregister le plus petit fichier possible avec la meilleures qualité possible. Dans cette disicpline, 2 formats sortent du lot : le WebP et l'Avif. Compresser des images en ligne
Le niveau de compression adapté
Choisir ça compression dépends de notre priorité. Si elle est de mettre en avant les détails des photos comme un site de joillier ou de photographe la compression doit être légère, entre 95% et 80%. En revenche si notre site n'as pas d'exigences quant aux rendus des images, une compression entre 80% et 70% et adéquat.
Afficher les chargements
certain temps de chargement sont incomprésible. Dans ces cas de figures, il faut adopter le bon indicateur de chargement pour ne pas donner l'impression que le système est arrêté :
-
Le spinner
Chargement dont la durée n’est pas connue. -
La barre de progression
Chargement dont la durée ou la progression est connue. -
Le skeleton
Chargement dont la mise en page est connue
Pour signaler aux sythèses vocales le temps de chargement d'une
partie de la page il faut ajouter l'attribut aria-busy="true"
Mesurer la web performance
Water fall
Le "Water fall" ou "chute d'eau" en français est un graphique chronologique mettant en avant l'ordre et la durée dew chargements de l'ensemble des ressources d'une page web.
Repèrer les requêtes problématiques
- Les longues
- Les lourdes
- Les redondantes
- Les inabouties
- Les bloquantes
En bas du "Water fall" le navigateur affiche différentes données :
- Le nombre de requêtes. il doit essayer d'être en dessous de 40 avec moins de 5 serveurs différents
- Le poids total de la page, cibler en dessous de 1Mo.
- Le temps de chargment global, devrait être en dessous de 3,3s et le temps de chargement du Dom.
-
Pour obtenir le nombre d'éléments du Dom, le
nombre nombre de balise de notre page, il faut saisir
cette entré
document.getElementsByTagName('*').length
dans la console du navigateur. Il faut dans l'idéale en avoir en dessous de 600.
Les indicateurs Core Vitals
Établient par Google, ces métrics offrent différentes lecture de la perception du chargement par les usagers. Pour optenir un score pour une page donnée, l'outil officiel Page Speed permet de les calculers et de sugèrer des pistes d'améloiration si nécessaire.
Métrics de chargments
- Indice de vitesse (SI)
Compare l'indice de vitesse de votre page à celui de sites Web réels - Chargement du premier élément (FCP)
mesure le temps nécessaire au navigateur pour afficher le premier contenu du DOM après qu'un utilisateur a accédé à votre page. - Chargement du Hero (LCP) Mesure le moment où le plus grand élément de contenu de la fenêtre d'affichage est affiché à l'écran.
Métrics d'expérience de temps de chargement
- Temps de réactivité (INP)
Durée totale pendant laquelle une page est bloquée pour répondre à un clics utilisateur ou les appuis au clavier. - Changement de mise en page (CLS)
Mesure les décalages de la mise en page durant l’affichage de la mise en page