Réduisez les retards de rendu en identifiant le CSS et JavaScript nécessaires avant l’apparition de contenu utile, puis en déplaçant le travail superflu hors de ce chemin. Gardez les styles essentiels disponibles, choisissez les bons modes de scripts et ne préchargez pas tout. Visez un affichage correct plus précoce, pas simplement un avertissement effacé au prix d’une page sans style ou défectueuse.
Distinguez rendu, analyse et travail du thread principal
Le navigateur transforme HTML en DOM et les styles en informations de présentation. Il combine structure et règles, calcule la mise en page et peint les pixels. Une feuille applicable peut retenir le rendu, car ses règles déterminent l’apparence.
Un script classique sans async ni defer peut suspendre l’analyse HTML pendant téléchargement et exécution. Ce blocage de l’analyseur diffère d’une instruction explicite bloquant le rendu, même s’il retarde découverte et affichage. Un script peut aussi attendre une feuille bloquante précédente, puisqu’il peut consulter les styles. La chaîne de dépendances importe davantage que l’extension.
Un script téléchargé de manière asynchrone s’exécute encore sur le thread principal, sauf déplacement explicite de son travail. Une longue exécution peut retarder affichage et entrées après le téléchargement. L’attribut change la planification, pas la quantité de travail.
Repérez l’événement visible affecté. Pour une image tardive, séparez téléchargement et CSS ou JavaScript empêchant son affichage. Le guide LCP distingue ces phases. Si la page apparaît vite mais répond mal, utilisez l’analyse du temps d’exécution JavaScript.
Lisez les dépendances avec les outils actuels
« Éliminer les ressources bloquant le rendu » demeure une recherche fréquente et un intitulé d’anciens rapports. Lighthouse 13 a déplacé de nombreux audits vers les insights ; les rapports récents peuvent présenter un insight sur les requêtes bloquantes. Le principe reste valable, mais les anciens identifiants et emplacements JSON peuvent disparaître.
Enregistrez une navigation dans Performance et inspectez la cascade Network. Repérez document, CSS, scripts, fontes et ressource LCP. Cherchez les requêtes découvertes après un autre fichier et leurs initiateurs. Une petite feuille enchaînée par @import peut commencer plus tard qu’une grande feuille directement liée au HTML.
Conservez capture ou filmstrip de référence. Un premier dessin plus rapide avec navigation cassée ou contenu sans style n’est pas nécessairement meilleur. Inspectez toute la page : le code absent du premier écran peut servir plus bas.
N’additionnez pas les économies des insights comme des mesures indépendantes. Plusieurs suggestions peuvent viser la même chaîne. Testez un changement cohérent, puis observez les temps et le rendu effectifs.
Gardez le CSS critique réduit et maintenable
Le CSS critique regroupe les règles du premier affichage. Insérer une sélection mesurée dans le document peut éviter une requête dédiée. Intégrer la feuille complète est différent : chaque réponse HTML grossit et les styles ne sont plus réutilisables comme fichier distinct en cache.
Le premier écran dépend de l’appareil, de la langue, du consentement et du contenu. Une extraction depuis une capture de bureau peut oublier navigation mobile, titre traduit long ou erreur. Traitez l’extraction comme un processus de build avec modèles représentatifs et vérifications visuelles.
Ce petit exemple conserve le minimum de mise en page dans le document et charge une feuille d’impression avec une condition média.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Performance notes</title>
<style>
body { margin: 0; font-family: system-ui, sans-serif; line-height: 1.6; }
header, main { max-width: 70rem; margin-inline: auto; padding: 1rem; }
img { max-width: 100%; height: auto; }
</style>
<link rel="stylesheet" href="/styles/print.css" media="print">
</head>
<body>
<header>Performance notes</header>
<main><h1>A readable first render</h1><p>Essential content is available immediately.</p></main>
</body>
</html>Une condition non satisfaite empêche le blocage pour le média courant, mais n’interdit pas le téléchargement. Ne laissez pas une feuille d’écran en media="print" : cela change l’application des règles. Les techniques changeant le média après chargement doivent gérer panne de script, Content Security Policy et contenu sans style.
Les styles intégrés doivent respecter la CSP via le nonce ou hash prévu. N’affaiblissez pas une politique existante pour copier une optimisation. Le build doit synchroniser CSS critique et feuille complète afin d’éviter un saut ultérieur dû à des règles périmées.
Découpez CSS selon les besoins réels
Une base partagée et des styles par route ou composant évitent qu’un article simple reçoive tout le design d’une application complexe. Gardez la base modeste et chargez les styles lorsque le composant existe. Trop de petits fichiers créent du travail de planification et de maintenance ; choisissez des fonctions significatives comme frontières.
Retirez les chaînes @import inutiles lorsque vous contrôlez le build. Découvrir une feuille dans une autre ajoute une dépendance. Les liens HTML directs ou la résolution à la compilation rendent la découverte plus explicite. Le problème est la chaîne de requêtes, pas chaque règle importée.
Examinez CSS-in-JS à l’exécution. Certaines implémentations doivent télécharger et exécuter JavaScript avant d’insérer les styles, retardant leur découverte et ajoutant parfois des recalculs. Une extraction serveur ou build peut modifier ce chemin, selon bibliothèque, framework et version.
Inspectez la réponse produite plutôt que le seul code composant. Un framework extrait peut-être déjà CSS, tandis qu’une autre configuration l’injecte à l’exécution. Vérifiez les styles utilisables dans le HTML initial avant de remplacer une bibliothèque.
Choisissez async, defer et les modules selon leurs dépendances
Un script indépendant tolère un ordre variable ; du code dépendant du DOM ou d’une bibliothèque peut ne pas le tolérer. Ajouter async partout risque de créer des courses.
Les principaux modes des scripts externes ont des comportements distincts.
| Forme | Téléchargement | Exécution et ordre |
|---|---|---|
| Classique sans attributs | Peut suspendre l’analyseur | Avant la reprise de l’analyse |
Classique avec defer |
Parallèle à l’analyse | Après analyse, ordre documentaire, avant DOMContentLoaded |
Classique avec async |
Parallèle à l’analyse | Dès disponibilité, sans ordre documentaire garanti |
type="module" sans async |
Graphe téléchargé pendant l’analyse | Différé par défaut, dépendances dans le graphe |
Préservez l’ordre des scripts classiques dépendants avec defer.
<script src="/scripts/vendor.js" defer></script>
<script src="/scripts/navigation.js" defer></script>Pour une entrée modulaire, indiquez le type et exprimez les dépendances par les imports.
<script type="module" src="/scripts/app.js"></script>Pour un script réellement indépendant, async peut convenir.
<script src="/scripts/independent-widget.js" async></script>Ces exemples sont des choix pour des ressources différentes, pas trois versions d’une fonction à inclure ensemble. defer n’a pas d’effet utile sur un script classique intégré. Les modules sont déjà différés ; async modifie l’exécution de leur graphe. Consultez la documentation de script avant de modifier une ancienne page mixte.
Testez ensuite menus, recherche, validation, paiement et consentement selon le site. Examinez Console. Un script classique intégré plus loin peut appeler trop tôt une bibliothèque en defer. Corrigez la dépendance au lieu de changer les attributs jusqu’à une réussite fortuite.
Utilisez preload et preconnect pour un retard identifié
Preload annonce une ressource actuelle avant sa découverte normale. Il n’applique pas une feuille, n’exécute pas un script et n’affiche pas une image. Le consommateur habituel reste nécessaire et la requête doit correspondre.
Cet exemple avance une fonte que le CSS utilisera immédiatement.
<link rel="preload" href="/fonts/site-regular.woff2"
as="font" type="font/woff2" crossorigin>Utilisez le bon as et le bon mode de requête. Une mauvaise indication peut créer un second téléchargement ou un fichier inutilisé. Ne préchargez pas tout : des ressources superflues mises en priorité concurrencent les véritables besoins critiques.
Preconnect traite l’établissement de connexion, pas le poids ni l’exécution. Il peut aider pour une origine distante essentielle découverte tard. Limitez-le aux origines utiles tôt et au mode CORS approprié. Une connexion de même origine déjà utilisée pour le document n’a généralement pas besoin d’un nouvel indice pour d’autres fichiers.
modulepreload possède une sémantique de téléchargement et préparation propre aux modules. Utilisez les indications du framework lorsqu’elles existent et inspectez-les. Ne les remplacez pas mécaniquement par des preloads génériques sans comprendre graphe et mode de requête.
Traitez Coverage comme un relevé, pas un ordre de suppression
Coverage indique les portions de CSS et JavaScript utilisées pendant l’activité enregistrée. Démarrez avec un rechargement, puis utilisez menus, dialogues, défilement, onglets et dispositions responsives chargeant d’autres composants.
« Inutilisé » signifie inutilisé pendant cette session. Une autre route, interaction tardive, erreur ou langue peut nécessiter le code. Des règles mobiles semblent superflues dans un test uniquement de bureau. Ne supprimez pas toutes les zones rouges d’un seul enregistrement.
Reliez les gros bundles inutilisés à leurs modules, modèles ou extensions. Supprimez une fonction abandonnée, chargez une dépendance uniquement sur sa route ou configurez le build pour retirer le code réellement inaccessible. Évitez d’éditer des fichiers générés que la compilation suivante écrasera.
Retestez et notez les interactions couvertes. Coverage devient plus utile avec un graphe de dépendances et des contrôles visuels ou fonctionnels. Il ne prouve pas qu’une application dynamique n’utilisera jamais une fonction.
Vérifiez ensemble les transformations du CMS
Thème, cache et extensions peuvent chacun fusionner CSS, retarder scripts et réécrire les indications. Le HTML final peut différer fortement de l’écran de réglages. Inspectez réponse et initiateurs.
N’activez pas toutes les options de retard à la fois. Gardez une référence compréhensible, modifiez une couche et testez les parcours essentiels. Certains scripts doivent précéder une initialisation intégrée ; des styles servent à un bandeau ou menu mobile absent du test simple.
Après modification des modèles, invalidez le cache concerné et contrôlez réponses fraîches et stockées. Une incohérence peut provenir de deux versions plutôt que de la planification du navigateur. Prévoyez le retour à la configuration antérieure.
Confirmez un affichage correct plus tôt
Répétez la navigation dans les mêmes conditions et comparez contenu utile initial, LCP, mouvements et travail du thread principal. Vérifiez page entière et interactions. Moins de requêtes bloquantes constitue une preuve utile lorsque rendu et fonctionnement restent corrects.
Incluez écran étroit, long titre traduit et cache vide. Si les fontes retardent le texte, poursuivez avec l’optimisation des polices web. Consignez les dépendances dans la checklist de performance et utilisez les guides de vitesse pour le prochain goulot identifié. Gardez les changements dont le bénéfice résiste aux tests reproductibles.