100 points sur PageSpeed : ce que nous avons changé

Le temps de chargement est un facteur de classement, mais les conseils habituels aident rarement. Cet article décrit ce que nous avons réellement modifié sur notre site, ce que chaque mesure a rapporté et où nous nous sommes trompés.

Une forme lumineuse accélère vers la droite, derrière elle des blocs sombres se dissolvent

L'essentiel en bref

  • Le plus grand gain isolé n'est pas venu de la réduction des fichiers, mais du remplacement d'une bibliothèque de 458 Ko par 6 Ko de code maison.
  • La deuxième cause était une compression à moitié configurée : le serveur ne compressait que le HTML, pas le CSS ni le JavaScript.
  • Un décalage de mise en page de valeur 1 a coûté 24 points – provoqué par du CSS chargé après coup, qui n'agissait qu'après le premier rendu.
  • Ce qui a le moins rapporté : les formats d'image. Ce qui a le plus rapporté : retirer des choses.

La valeur de départ était de 58 sur 100 sur mobile. Ce n'est pas un mauvais score pour un site avec un effet 3D en en-tête, mais c'est un score que Google sanctionne sensiblement dans la recherche mobile. À l'arrivée : 100 points sur ordinateur et 98 sur mobile, avec également 100 pour l'accessibilité.

Ce qui suit n'est pas une liste générale mais le déroulé réel – y compris les endroits où nous nous sommes trompés.

Une forme lumineuse accélère vers la droite, derrière elle des blocs sombres se dissolvent
Une page ne devient pas rapide en optimisant, mais en retirant.

La situation de départ

Mesure (mobile)avantaprès
Performance5898
Accessibilité95100
Premier rendu6,1 s1,4 s
Plus grand élément visible11,1 s2,1 s
Total transféré298 Ko184 Ko
dont JavaScript121 Ko5 Ko

Les cinq interventions qui ont vraiment compté

1. Remplacer la bibliothèque, pas l'optimiser

L'en-tête affiche un nuage de particules en 3D. Une bibliothèque graphique connue tournait pour cela – 458 Ko après minification. La mesure indiquait que 51 Ko n'étaient jamais exécutés.

Le regard décisif a été de nous demander ce dont nous avions réellement besoin. C'était onze briques : moteur de rendu, scène, caméra, géométrie, matériau et quelques classes utilitaires. Tout cela se programme directement contre l'interface graphique du navigateur.

Résultat : 458 Ko sont devenus 6 Ko. Le rendu est identique – nous avons repris les mêmes shaders.

Attention Deux détails sont à reproduire, sinon le résultat paraît faux : la bibliothèque convertit les couleurs du format hexadécimal en lumière linéaire, et elle mélange en mode additif avec alpha prémultiplié. Sans les deux, notre nuage de particules ressortait nettement plus criard qu'avant.

2. La compression n'était qu'à moitié activée

Dans la configuration du serveur, la compression était sur « activée » – mais la ligne indiquant quels types de fichiers compresser était commentée. C'est le réglage par défaut de nombreuses distributions. Résultat : seul le HTML était compressé.

La bibliothèque graphique passait donc sur le réseau sans compression. Après activation : 1243 Ko sont devenus 251 Ko. En complément, nous déposons désormais les versions compressées précalculées à côté, pour que le serveur ne recalcule pas à chaque appel.

Effort : deux lignes de configuration. Effet : près d'un mégaoctet par première visite.

3. Supprimer entièrement la bibliothèque d'animation

Une autre bibliothèque, de 114 Ko, gérait les apparitions au défilement. La mesure la désignait en outre comme responsable de recalculs de mise en page forcés – elle interrogeait la géométrie pendant le défilement et obligeait le navigateur à recalculer la mise en page en plein mouvement.

Remplacée par un IntersectionObserver qui se contente d'ajouter une classe. Le mouvement lui-même est fait en CSS. 114 Ko de moins, plus de recalculs, une quarantaine de lignes de code maison.

4. Le favicon pesait 205 Ko

Un détail à l'effet étonnant, parce qu'il se charge très tôt. Remplacé par un fichier SVG de 6 Ko, produit à partir du logo existant.

Le saviez-vous ?

Pour l'affichage dans les résultats de recherche Google, un favicon SVG ne sert à rien – Google n'y accepte que des formats matriciels, et l'image doit être carrée avec un côté multiple de 48 pixels.

Qui ne dépose qu'un SVG obtient donc le carré gris à la place de son logo dans les résultats. Indiquer les deux côte à côte est la bonne solution.

5. Interroger la géométrie dans la trame d'animation

Un script lisait la hauteur totale du document à chaque événement de défilement. Le navigateur ne peut pas répondre de mémoire à cette propriété – il doit recalculer la mise en page de toute la page, en plein défilement.

La règle qui en découle et qui vaut partout : lire dans l'événement, écrire dans la trame suivante. Jamais l'inverse. Depuis, la hauteur de page est mesurée une fois et mémorisée, au lieu d'être redemandée soixante fois par seconde.

L'erreur qui a coûté 24 points

À gauche une pile dense de blocs gris, vers la droite il ne reste que quelques blocs lumineux
Ce qui reste décide du temps de chargement – pas la qualité de compression de ce qui reste.
Retour de pratique

Pour éliminer la dernière requête bloquante, nous avions scindé la feuille de style : la partie nécessaire à la zone visible passait directement dans le document, le reste était chargé après. Une pratique courante.

La coupure se situait à un repère du fichier source, derrière lequel nous supposions la zone visible. En réalité, s'y trouvaient les règles du logo dans l'en-tête, des espacements en dessous et des apparitions. La page se construisait donc sans elles et se réajustait une seconde plus tard.

Le résultat : un Cumulative Layout Shift de 1,0 – et donc 76 points au lieu de 100 sur ordinateur. Particulièrement désagréable : en local avec une connexion bridée, la valeur était de 0, parce que la feuille de style arrivait assez tôt. L'erreur n'était visible que sur connexion rapide.

La leçon : soit toute la feuille de style dans le document, soit aucune. Une intégration partielle suppose de savoir exactement quelle règle sert dans la zone visible – et sur un site qui grandit, on ne le sait jamais durablement.

Conseil En cas de soupçon de décalage de mise en page, mesurez sans bridage. Un outil de test avec connexion mobile simulée livre le fichier assez tôt et ne montre pas le décalage. Mesurer uniquement ainsi fait croire le problème résolu.

Ce qui a peu rapporté

Pour être complets, les mesures présentes dans tous les guides et à peine mesurables chez nous :

Les formats d'image. Notre page d'accueil comporte peu d'images – le logo est un fichier SVG. Là où il y a des images, la conversion vaut évidemment la peine ; comme levier principal, elle ne sert que sur les pages riches en images.

Réduire encore les polices. Nous hébergeons nous-mêmes deux familles et préchargeons celles nécessaires à la zone visible. Une optimisation supplémentaire serait possible, mais ne bouge pas le score.

L'emplacement du serveur. Souvent recommandé, sans objet dans notre cas : le temps jusqu'au premier octet était déjà de 20 millisecondes. Qui est déjà bon à cet endroit ne gagne rien avec un réseau de distribution.

La marche à suivre, à reproduire

  1. Mesurer avant toute modification. Mobile et ordinateur séparément, et noter les valeurs.
  2. Chercher le plus gros fichier transféré. C'est presque toujours du JavaScript. La question n'est pas comment le réduire, mais si on en a besoin.
  3. Vérifier la compression. Non pas si elle est activée, mais pour quels types de fichiers.
  4. Compter les requêtes bloquantes. Chaque feuille de style dans l'en-tête retarde le premier rendu.
  5. Contrôler les décalages sans bridage. Le test qui nous a manqué.
  6. Remesurer après chaque modification. Sinon on ne sait pas, à la fin, ce qui a agi.
Prompt
Aide-moi à traduire le rapport PageSpeed de mon site en un ordre
de priorités. Sois strict ; ne complimente rien.

Mes mesures :
- Mobile : [score], ordinateur : [score]
- LCP, TBT, CLS par appareil : [valeurs]
- Plus gros fichiers transférés avec leur taille : [liste]
- Requêtes bloquant le rendu : [liste]
- Messages du rapport : [coller le texte]

Sur le site :
- Comment il est construit : [CMS / statique / éditeur en ligne]
- Le JavaScript est-il nécessaire au contenu visible ? [oui/non]
- Comment le CSS est-il livré ? [externe / intégré / partiellement
  intégré]

Tâches :
1. Rattache chaque message à une cause et dis quel indicateur il
   influence – LCP, TBT ou CLS.
2. Classe les mesures par effet rapporté à l'effort. Pour chacune,
   indique combien de points elle déplace réellement et pourquoi.
3. Nomme les mesures du rapport qui n'apportent pratiquement rien
   à ce type de construction – et justifie, au lieu de simplement
   les omettre.
4. Pour chaque gros fichier JavaScript, demande d'abord s'il est
   nécessaire avant de proposer de le réduire.
5. Signale si le CSS n'est que partiellement intégré et explique
   pourquoi cela peut être pire pour le CLS que pas du tout.
6. Indique ce que je devrais remesurer après chaque modification.

N'invente aucune mesure.

Conclusion

Le score en lui-même n'est pas l'objectif – c'est une mesure, pas un résultat commercial. Ce qui compte, c'est l'expérience derrière : une page lisible au bout de 1,4 seconde est lue par plus de monde qu'une page qui en demande six. Chez les visiteurs mobiles en réseau cellulaire, l'écart pèse plus lourd que n'importe quelle optimisation de texte.

Le chemin est passé chez nous par une seule question récurrente : en avons-nous besoin ? Cinq interventions sur six ont consisté à retirer quelque chose, pas à en ajouter.

Questions fréquentes

Comment atteindre 100 points sur PageSpeed Insights ?

Sur la plupart des sites, en trois étapes : supprimer ou remplacer le plus gros fichier JavaScript, activer réellement la compression pour le CSS et le JavaScript, et éliminer les décalages de mise en page. Les formats d'image et l'emplacement du serveur sont rarement le goulot d'étranglement.

Quelle importance a le temps de chargement pour le classement Google ?

C'est un facteur confirmé, mais pas puissant – le contenu et la pertinence pèsent davantage. L'effet le plus important est indirect : les pages lentes sont plus souvent abandonnées, et ce comportement entre dans l'évaluation.

Qu'est-ce que le Cumulative Layout Shift et comment le corriger ?

La mesure des éléments qui changent de position après le premier rendu. Causes les plus fréquentes : images sans dimensions fixes, feuilles de style chargées après coup et polices aux métriques très différentes. On le corrige en fixant la place à l'avance – par des indications de largeur et de hauteur ou un rapport d'aspect fixe.

Faut-il intégrer le CSS dans le HTML ?

Pour de petites feuilles de style oui, mais alors entièrement. Une intégration partielle avec chargement du reste économise une requête et introduit des décalages dès qu'une règle de la zone visible manque. Chez nous, il s'agissait de 7 Ko compressés – l'intégration complète en vaut la peine.

Que rapporte le renoncement aux bibliothèques ?

Dans notre cas, le poste isolé le plus important : 458 Ko de bibliothèque graphique sont devenus 6 Ko de code maison, plus 114 Ko de bibliothèque d'animation ramenés à zéro. Le gain dépend de la part réellement utilisée – la mesure indique le JavaScript inutilisé.

Un marketing qui se met en place tout seul

La bêta du Studio Engine est ouverte. Réservez votre place et participez dès le départ.

Participer à la bêta →
← Retour à la vue d'ensemble