Je cherche à améliorer les Web Vitals de mon site, en particulier le LCP. J’ai des problèmes où le temps est d’environ 2,7 secondes (devrait être inférieur à 2,5 secondes). D’après Optimize Largest Contentful Paint | Articles | web.dev :
Plus précisément, le LCP mesure le temps écoulé entre le moment où l’utilisateur lance le chargement de la page et le moment où la plus grande image ou le plus grand bloc de texte est rendu dans la fenêtre d’affichage.
J’ai isolé le problème à un composant de thème de bannière que j’ai écrit. Une image de bannière que je monte comme un widget “above-main-container” est le plus grand objet peint à l’écran pour pratiquement toutes les pages.
Voici ce que je pense qu’il se passe. La div contenant l’image est montée à l’aide de JS, donc une série de prérequis doivent se produire lors du rafraîchissement d’une page Discourse avant que ce code JS ne s’exécute. Cela entraîne la récupération de la bannière après 2,5 secondes, nuisant ainsi à la métrique LCP.
J’ai tenté de prioriser l’image de la bannière en utilisant fetchpriority="high", comme on le voit dans le code. Mais je pense que cela ne résout pas le problème de synchronisation à la racine.
Des suggestions sur la façon de prioriser le rendu de ce composant de thème particulier ? Serait-il préférable de le convertir en plugin ? Existe-t-il un autre moyen d’injecter la bannière le plus tôt possible ? Merci !
J’ai basculé sur l’utilisation d’un CDN, ce qui n’a pas aidé. Comme je l’ai mentionné, je pense que l’appel pour récupérer la bannière est ce qui se passe trop tard, pas le temps de récupération. J’essaierai le prefetch pour voir si cela fait une différence !
Ce que j’ai fait en attendant de trouver une solution, c’est de ne pas afficher la bannière sauf si vous êtes connecté. Il semble que Google calcule le LCP principalement à partir du trafic de recherche, qui est généralement constitué d’utilisateurs non connectés dans mon cas.
Le LCP proviendra de tous les utilisateurs de Google Chrome, donc Android, Windows, MacOS, Linux et Chromebooks.
Si vous avez plus de pages vues provenant d’utilisateurs anonymes sur ces appareils que d’utilisateurs connectés, oui, votre LCP reflétera les performances de ces utilisateurs anonymes.
Tout d’abord, je viens de vérifier et l’écran de démarrage utilise déjà tout l’écran (100vh et 100% de largeur).
Cependant, certains utilisateurs n’auront pas l’écran de démarrage si leur démarrage Discourse est suffisamment rapide. Pour ceux-là, le LCP sera défini par l’élément suffisamment grand. Dans votre cas, la bannière, vous êtes donc lié par elle.
J’essaierais la balise méta prefetch, et je m’assurerais qu’il s’agit d’un actif très bien optimisé et que tous vos actifs sont livrés via CDN avec des PoP proches de l’endroit où se trouvent vos utilisateurs.
J’ai essayé cette solution possible et elle n’a malheureusement pas semblé faire de différence. J’ai également remplacé l’image de bannière par une image trivialement petite pour une vérification de bon sens et cela n’a fait aucune différence pour le LCP. Merci pour la suggestion cependant.
Je ne connais pas le fonctionnement interne de l’injection des composants de thème dans la page, mais j’ai l’impression qu’au moment où le composant de bannière est injecté, il est déjà trop tard. Ma prochaine tentative sera d’essayer en tant que plugin.