05 — Glossaire : Core Web Vitals et indicateurs de performance
Définitions, causes de ralentissement et solutions pour les indicateurs que vous allez relever tout au long du TP. À garder ouvert pendant l'audit : c'est ici que vous vérifierez ce que signifie exactement un chiffre avant de le commenter dans votre rapport.
Les seuils indiqués sont ceux publiés par Google.
1. CLS (Cumulative Layout Shift)
Le CLS (Décalage Cumulatif de la Mise en Page) mesure la stabilité visuelle d'une page web. Il calcule la fréquence à laquelle les éléments d'une page bougent de façon inattendue pendant son chargement ou sa lecture. C'est ce qui se produit quand le texte saute juste avant de cliquer parce qu'une image sans dimension définie vient de s'afficher.
Causes principales
- Images ou vidéos sans dimensions
- Publicités ou bannières dynamiques
- Polices de caractères (Web Fonts)
La solution la plus simple (Code)
<!-- Mauvaise pratique : le navigateur ne connaît pas la taille, la page va sauter -->
<img src="mon-image.jpg" alt="Paysage">
<!-- Bonne pratique : l'espace de 800x600 est réservé immédiatement -->
<img src="mon-image.jpg" width="800" height="600" alt="Paysage">
Évaluation et seuils de Google
- Bon : Inférieur à 0.1
- À améliorer : Entre 0.1 et 0.25
- Médiocre : Supérieur à 0.25
2. LCP (Largest Contentful Paint)
Le LCP mesure la vitesse d'affichage du contenu principal. Il calcule le temps exact qu'il faut pour que l'élément le plus volumineux visible à l'écran (image, vidéo, gros bloc de texte) soit entièrement chargé et visible par l'utilisateur.
Causes principales
- Images non optimisées
- Temps de réponse du serveur lent
- Blocage du rendu (JavaScript ou CSS bloquant)
La solution la plus simple (Code)
<head>
<!-- On ordonne au navigateur de télécharger cette image avant le reste -->
<link rel="preload" href="grande-banniere.webp" as="image">
</head>
<body>
<img src="grande-banniere.webp" alt="Bannière principale">
</body>
⚠️ Le
preloadn'est pas une recette universelle. Il ne rend rien plus rapide : il change des priorités. Précharger une image qui n'est pas nécessaire au premier affichage lui fait voler de la bande passante à celle qui détermine justement le LCP — et dégrade donc le LCP au lieu de l'améliorer. On ne précharge que ce qui est à la fois critique et découvert tardivement par le navigateur. Voir le point B4 du guide de résolution.
Évaluation et seuils de Google
- Bon : Moins de 2,5 secondes
- À améliorer : Entre 2,5 s et 4,0 s
- Médiocre : Plus de 4,0 secondes
3. INP (Interaction to Next Paint)
ℹ️ L'INP n'apparaîtra pas dans vos relevés. C'est une métrique de terrain, mesurée sur de vrais visiteurs : elle ne figure que dans la section « données de terrain » de PageSpeed Insights, absente ici faute de trafic réel. Sur ce site, c'est le TBT qui joue son rôle en laboratoire. La notion reste à connaître : c'est elle qui compte pour un site en production.
L'INP mesure la réactivité globale de votre page. Il calcule le temps qui s'écoule entre le moment où vous interagissez avec la page (cliquer, taper) et le moment où le navigateur affiche visuellement le résultat. L'INP a remplacé le FID (First Input Delay) en 2024.
Causes principales
- Le JavaScript qui accapare le fil d'exécution principal du navigateur.
- Des tâches longues qui empêchent le navigateur de traiter les interactions de l'utilisateur.
La solution la plus simple (Code)
// Bonne pratique : Découper le travail pour laisser le navigateur respirer
function fairePleinDeChosesAmeliore() {
calculerDesDonneesLourdes();
// Utilisation de setTimeout pour différer la suite
setTimeout(function() {
mettreAjourLinterface();
}, 0);
}
Évaluation et seuils de Google
- Bon : Moins de 200 ms
- À améliorer : Entre 200 ms et 500 ms
- Médiocre : Plus de 500 ms
4. FCP (First Contentful Paint)
Le FCP mesure le temps qui s'écoule entre le moment où l'utilisateur clique sur le lien et le moment où le tout premier élément visuel apparaît à l'écran (texte, image, ou même un fond de couleur). C'est la première impression de rapidité du site.
Causes principales
- Fichiers CSS ou JavaScript lourds bloquant l'affichage initial
- Ressources non critiques chargées trop tôt
La solution la plus simple (Code)
<head>
<!-- CSS critique inline -->
<style>
body { font-family: sans-serif; background: #f4f4f4; }
h1 { color: #333; margin-top: 20px; }
</style>
<!-- Le CSS moins urgent chargé de façon asynchrone -->
<link rel="preload" href="reste-du-site.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
</head>
Évaluation et seuils de Google
- Bon : Moins de 1,8 seconde
- À améliorer : Entre 1,8 s et 3,0 s
- Médiocre : Plus de 3,0 secondes
5. TBT (Total Blocking Time)
Le TBT mesure la quantité de temps pendant laquelle votre page web est incapable de répondre aux interactions de l'utilisateur pendant son chargement. Il additionne le temps excédentaire (au-delà de 50 ms) de toutes les tâches longues (Long Tasks) sur le fil principal.
Causes principales
- Code JavaScript non essentiel chargé trop tôt
- Fichiers JavaScript non découpés (Code Splitting insuffisant)
- Calculs lourds non délégués (Web Workers)
La solution (Principe général)
- Retarder le code non essentiel (Defer) : Ne chargez pas immédiatement les scripts non critiques.
- Découper le code (Code Splitting) : Envoyez le code en plusieurs petits morceaux.
- Déplacer les calculs complexes : Utilisez des Web Workers pour ne pas bloquer l'affichage.
Évaluation et seuils de Google
- Bon : Moins de 200 ms
- À améliorer : Entre 200 ms et 600 ms
- Médiocre : Plus de 600 ms
6. Speed Index
Le Speed Index est un score mathématique qui mesure la vitesse à laquelle le contenu d'une page devient visuellement disponible pendant son chargement. Un site qui s'affiche progressivement aura un meilleur score qu'un site qui affiche tout brutalement à la fin.
Causes principales
- Polices de caractères bloquantes (texte invisible)
- Ressources bloquantes retardant le rendu global
- Images trop lourdes au-dessus de la ligne de flottaison
La solution la plus simple (Code)
/* Bonne pratique dans le CSS avec font-display: swap */
@font-face {
font-family: 'MaSuperPolice';
src: url('ma-super-police.woff2') format('woff2');
font-display: swap;
}
body {
font-family: 'MaSuperPolice', sans-serif;
}
Évaluation et seuils de Google
- Bon : Moins de 3,4 secondes
- À améliorer : Entre 3,4 s et 5,8 s
- Médiocre : Plus de 5,8 secondes