Reporter les CSS non critiques

Demián Renzulli
Demián Renzulli

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:

Rapport Lighthouse pour une page non optimisée, affichant le FCP de "1" et "Éliminer le blocage des ressources" sous "Opportunités"
Le rapport Lighthouse suggère de simplifier votre feuille de style pour accélérer le chargement de votre page.

Pour visualiser comment ce CSS bloque l'affichage:

  1. Ouvrez la page dans Chrome.
  2. Appuyez sur Control+Shift+J (ou Command+Option+J sur Mac) pour ouvrir DevTools.
  3. Cliquez sur l'onglet Performances.
  4. 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 :

Trace des performances des outils de développement pour la page non optimisée, indiquant que le FCP démarre après le chargement du CSS.
Sur la page de démonstration non optimisée, le FCP ne peut pas se produire tant que le CSS n'a pas fini de se charger.

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:

  1. Dans les outils de développement, ouvrez le menu Command en appuyant sur Control+Shift+P ou Command+Shift+P (Mac).
  2. Saisissez "Couverture", puis sélectionnez Afficher la couverture.
  3. Cliquez sur Actualiser pour actualiser la page et commencer à enregistrer la couverture.
Couverture du fichier CSS, affichant 55,9% des octets inutilisés.
Le rapport sur la couverture indique la quantité de votre CSS qui est réellement utilisée lors du chargement initial de la page.

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 :

  1. 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>
    
  2. 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 sur preload, consultez le guide Précharger les éléments critiques.
  • L'attribut onload dans link 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'attribut rel.
  • 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:

Trace des performances des outils de développement pour la page optimisée, indiquant que le FCP démarre avant le chargement du CSS.
Sur la page optimisée, le FCP peut commencer avant le chargement de la feuille de style.

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 % !):

Rapport Lighthouse, affichant une valeur FCP de 0,8 s.
Nouveau FCP réduit.

La suggestion Éliminer les ressources bloquant l'affichage ne s'affiche plus sous Opportunités, mais dans la section Audits réussis:

Illustration du rapport Lighthouse, montrant &quot;Éliminer les ressources bloquantes&quot; dans la section &quot;Audits réussis&quot;.
La page passe désormais avec succès l'audit d'audit des ressources bloquantes.

É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.