Les fichiers CSS sont des ressources bloquant l'affichage : ils doivent être chargés et traités avant que le navigateur n'affiche la page. L'affichage des pages Web contenant des feuilles de style inutilement volumineuses prend plus de temps.
Dans ce guide, vous allez apprendre à différer le CSS non critique afin d'optimiser le chemin de rendu critique et d'améliorer le FCP (First Contentful Paint).
Exemple : chargement CSS non optimal
L'exemple suivant contient un accordéon avec trois paragraphes de texte cachés, chacun étant stylisé avec une classe différente:
Cette page demande un fichier CSS avec huit classes, mais toutes ne sont pas nécessaires pour afficher le contenu "visible".
L'objectif de ce guide est d'optimiser cette page afin que seuls les styles critiques soient chargés de manière synchrone, tandis que le reste (y compris les styles de paragraphe) est chargé de manière non bloquante.
Mesurer
Exécutez Lighthouse sur la page et accédez à la section Performance.
Le rapport affiche la métrique First Contentful Paint avec la valeur "1s" et l'opportunité Elimating Afficher les ressources qui bloquent l'affichage, pointant vers le fichier style.css:
Pour visualiser comment ce CSS bloque l'affichage:
- Ouvrez la page dans Chrome.
- Appuyez sur
Control+Shift+J
(ouCommand+Option+J
sur Mac) pour ouvrir DevTools. - Cliquez sur l'onglet Performances.
- Dans le panneau "Performances", cliquez sur Actualiser.
Dans la trace obtenue, vous verrez que le repère FCP est placé immédiatement après le chargement du CSS :
Cela signifie que le navigateur doit attendre que tous les fichiers CSS soient chargés et traités avant de peindre un seul pixel à l'écran.
Optimiser
Pour optimiser cette page, vous devez savoir quelles classes sont considérées comme critiques. Pour déterminer cela, utilisez l'outil de couverture:
- Dans les outils de développement, ouvrez le menu Command en appuyant sur
Control+Shift+P
ouCommand+Shift+P
(Mac). - Saisissez "Couverture", puis sélectionnez Afficher la couverture.
- Cliquez sur Actualiser pour actualiser la page et commencer à enregistrer la couverture.
Double-cliquez sur le rapport pour afficher les détails:
- Les classes marquées en vert sont essentielles. Le navigateur en a besoin pour afficher le contenu visible, y compris les boutons du titre, des sous-titres et de l'accordéon.
- Les classes en rouge ne sont pas critiques. Elles n'affectent que le contenu qui n'est pas immédiatement visible, comme les paragraphes masqués.
Avec ces informations, optimisez votre CSS afin que le navigateur puisse commencer à traiter les styles critiques immédiatement après le chargement de la page et différer le CSS non critique pour plus tard :
Extrayez les définitions de classe marquées en vert dans le rapport de couverture, puis placez ces classes dans un bloc
<style>
en haut de la page :<style type="text/css"> .accordion-btn {background-color: #ADD8E6;color: #444;cursor: pointer;padding: 18px;width: 100%;border: none;text-align: left;outline: none;font-size: 15px;transition: 0.4s;}.container {padding: 0 18px;display: none;background-color: white;overflow: hidden;}h1 {word-spacing: 5px;color: blue;font-weight: bold;text-align: center;} </style>
Chargez le reste des classes de manière asynchrone en appliquant le modèle suivant :
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="styles.css"></noscript>
Il ne s'agit pas de la méthode standard pour charger le code CSS. Le principe est le suivant :
link rel="preload" as="style"
demande la feuille de style de manière asynchrone. Pour en savoir plus surpreload
, consultez le guide Précharger les éléments critiques.- L'attribut
onload
danslink
permet au navigateur de traiter le CSS lorsque la feuille de style a fini de se charger. - La valeur "null" du gestionnaire
onload
après son utilisation permet à certains navigateurs d'éviter de le rappeler lorsqu'ils changent l'attributrel
. - La référence à la feuille de style dans l'élément
noscript
fournit un remplacement pour les navigateurs qui n'exécutent pas JavaScript.
La page obtenue ressemble exactement à la version précédente, même lorsque la plupart des styles se chargent de manière asynchrone. Voici à quoi ressemblent les styles intégrés et la requête asynchrone envoyée au fichier CSS dans le fichier HTML:
Surveiller
Utilisez les outils de développement pour exécuter une autre trace Performance sur la page optimisée.
Le repère FCP apparaît avant que la page demande le CSS, ce qui signifie que le navigateur n'a pas besoin d'attendre que le CSS se charge pour afficher la page:
Pour terminer, exécutez Lighthouse sur la page optimisée.
Dans le rapport, vous constaterez que la page FCP a été réduite de 0,2 s (soit une amélioration de 20 % !):
La suggestion Éliminer les ressources bloquant l'affichage ne s'affiche plus sous Opportunités, mais dans la section Audits réussis:
Étapes suivantes et références
Dans ce guide, vous avez appris à différer le code CSS non critique en extrayant manuellement le code inutilisé de la page. Pour les environnements de production plus complexes, le guide d'extraction du CSS critique couvre certains des outils les plus populaires pour extraire le CSS critique et inclut un atelier de programmation pour voir comment ils fonctionnent en pratique.