"Éliminer-bloquer CSS dans le contenu au-dessus du pli"

j'ai utilisé Google PageSpeed insights pour essayer d'améliorer la performance de mon site, et jusqu'à présent, il s'est avéré extrêmement réussi. Des choses comme les scripts de déférement fonctionnaient très bien, puisque j'avais déjà une version interne de .ready() de jQuery pour reporter les scripts jusqu'à ce que la page ait été chargée complètement, tout ce que j'avais à faire était de mettre en ligne Cette fonction particulière et de déplacer les scripts complets à la fin de la page. Qui a très bien fonctionné.

mais maintenant je me retrouve le point jaune restant sur la liste de contrôle: "éliminer les CSS bloquant le rendu dans le contenu au-dessus du pli".

la façon dont mon CSS est configuré est d'avoir un fichier global _.css contenant les styles qui s'appliquent à la structure de la page en général, ou sont utilisés dans plus d'un ou deux endroits à travers le site. La plupart des pages ont alors un fichier CSS associé (par exemple, party.php a party.css ) contenant des styles spécifiques à cette page particulière. Tous les fichiers CSS sont mis en cache indéfiniment, comme j'ajoute /t=FILEMTIME aux noms de fichiers (et plus tard les supprimer avec .htaccess) afin de garantir que les fichiers sont mis à jour lorsqu'ils sont modifiés.

donc, de toute façon, Google recommande en ligne styles critiques nécessaires pour le contenu au-dessus du pli. La difficulté est... regardez cette capture d'écran: http://prntscr.com/1qt49e

Comme vous pouvez le voir... TOUS de le contenu est au-dessus de la ligne de flottaison! Les gens détestent scrolling, surtout sur un jeu qui implique de charger de nombreuses pages. Donc j'ai conçu le site pour s'adapter sur un écran (en supposant une bonne résolution). Ce qui signifie que... TOUS des styles s'appliquent à la fois le contenu! Si... est-il une solution? Ou suis-je coincé avec cette marque jaune sur un score par ailleurs presque parfait?

151
demandé sur Niet the Dark Absol 2013-09-12 14:03:23

6 réponses

une question connexe a déjà été posée: Qu'est-ce que le" contenu au-dessus du pli " dans Google Pagespeed?

tout d'abord, vous devez noter que tout cela est au sujet de " pages mobiles ".

Donc, quand j'ai interprété votre question et screenshot correctement, alors c'est pas pour votre site!

au contraire-faire certaines des choses conseillés par Google dans leurs lignes directrices, les choses empireront que mieux pour les sites "normaux".

Et tout ce qui vient de Google n'est pas le "Graal" juste parce qu'il vient de Google. Et ils eux-mêmes ne sont pas un bon modèle si vous avez un regard sur leur balisage HTML.

le meilleur conseil que je puisse vous donner est:

  • Réglez la largeur et la hauteur sur les éléments remplacés dans votre CSS, de sorte que le navigateur peut layout les éléments et ne doit pas attendre le contenu remplacé!

de plus, pourquoi utilisez-vous des fichiers CSS différents, plutôt qu'un seul?

La demande est pire que la petite quantité de volume de données. Et après la première requête, le fichier CSS est de toute façon mis en cache.

les choses dont on doit toujours s'occuper sont:

  • réduire le nombre de demandes autant que possible
  • gardez votre poids de page le plus bas possible

et ne cherchez pas à savoir comment obtenir 100% de L'outil Google PageSpeed Insights ...! ;- )

ajout 1: Voici la page sur laquelle Google nous montre, ce qu'ils recommandent pour optimiser la livraison CSS .

comme je l'ai dit plus tôt, Je ne pense pas que ce n'est ni réaliste ni que c'est logique pour un site "normal"! Parce que principalement quand vous avez un responsive Web design il est très certain que vous utilisez des requêtes médias et d'autres styles de mise en page. Donc, si vous n'allez pas charger votre CSS en premier et d'une manière de blocage, vous obtiendrez un FAT ( Flash de texte non écrit ). Je ne crois vraiment pas que ce soit "mieux" qu'au moins quelques millisecondes de plus pour rendre la page!

à mon humble avis Google commence un nouveau "battage médiatique" (quand j'ai un oeil à toutes les questions à ce sujet ici sur Stackoverflow) ...!

178
répondu Netsurfer 2017-05-23 12:34:30

Comment j'ai obtenu un 99/100 sur Google Page Speed (pour le mobile)

TLDR: compressez et intégrez l'intégralité de votre script css entre vos balises <style></style> .


ça fait une semaine que je suis à la recherche de ce score insaisissable de 100/100. Comme vous, le dernier point restant était l'élimination de "renderblocking css for above the fold content."

il y a sûrement une solution facile?? Nope. J'ai essayé Solution de loadCSS du groupe de filaments. Trop. js à mon goût.

Qu'en est-il des attributs async pour css (comme js)? Ils n'existent pas.

j'étais prêt à abandonner. Puis il se leva sur moi. Si linking le script bloquait le rendu, et si j'intégrais à la place tout mon css dans la tête. De cette façon, il n'y avait rien à bloc.

il a semblé tout à fait erroné d'intégrer 1263 lignes de CSS dans mon tag de style. Mais je lui ai donné un tourbillon. Je l'ai compressé (et je l'ai préfixé) en utilisant d'abord:

postcss -u autoprefixer --autoprefixer.browsers 'last 2 versions' -u cssnano --cssnano.autoprefixer false *.css -d min/ Voir le mécanisme national de prévention postcss package .

maintenant c'était juste une longue ligne de css sans espace. J'ai copié le CSS dans les étiquettes <style>your;great-wall-of-china-long;css;here</style> sur ma page d'accueil. Puis j'ai refait une analyse avec Page speed insights.

je suis passé de 90/100 à 99/100 sur mobile!!!

Cela va à l'encontre de tout en moi (et probablement vous). Mais il a RÉSOLU le problème. Je l'utilise juste sur ma page d'accueil pour le moment et en incluant le CSS compressé par programmation via un include PHP.

YMMV (votre kilométrage peut varier) selon la longueur de votre css. Google peut vous ding pour trop au-dessus du contenu de pli. , Mais ne présumez pas; test!

Notes

  1. ceci sur ma page d'accueil pour l'instant afin que les gens obtiennent un rendu rapide sur ma page la plus importante.

  2. votre css ne sera pas mis en cache. je ne suis pas trop inquiet. La seconde où ils ont frappé une autre page sur mon site, le .css sera mise en cache (voir la Note 1).

13
répondu elbowlobstercowstand 2016-12-23 00:15:37

quelques conseils qui peuvent aider:

  • je suis tombé sur cet article dans l'optimisation CSS hier: CSS de profilage ... optimisation

    Beaucoup d'informations utiles sur CSS et ce CSS cause les drains les plus performants.

  • j'ai vu la présentation suivante sur jQueryUK sur "hidden secrets" dans Google Chrome (Canary) Dev Tools: DevTools peut faire ce . Consultez les sections sur temps de peindre D'abord , repeints et CSS coûteux.

  • aussi, si vous utilisez un chargeur comme require js vous pouvez jeter un oeil à l'un des plugins de chargeur CSS, appelé require-CSS , qui utilise CSSO - un optimiseur qui fait également l'optimisation structurelle, par exemple. fusionner des blocs avec des propriétés identiques. J'ai utilisé il quelques fois et il peut sauver beaucoup de CSS d'un cas à l'autre.

hors de question: Je seconde @Enzino dans la création d'un sprite pour toutes les petites icônes que vous chargez. Les tailles de fichier sont si petites qu'elles ne justifient pas vraiment un aller-retour du serveur pour chaque icône. Gardez également à l'esprit le nombre total de requêtes http simultanées que le navigateur peut faire. Demande pour un plus grand nombre de petits icônes sont des "rendez-blocage". Bien qu'une page vide comparer à la vôtre, j'aime comment duckduckgo charges par exemple.

8
répondu frequent 2013-09-17 07:27:50

s'il vous plaît jeter un oeil à la page suivante https://varvy.com/pagespeed/render-blocking-css.html . Cela m'a aidé à me débarrasser de "Render Blocking CSS" . J'ai utilisé le code suivant pour supprimer " Render Blocking CSS ". Maintenant, dans Google Page Speed insight Je ne reçois pas de problème lié au blocage de rendu css.

<!-- loadCSS -->
<script src="https://cdn.rawgit.com/filamentgroup/loadCSS/6b637fe0/src/cssrelpreload.js"></script>
<script src="https://cdn.rawgit.com/filamentgroup/loadCSS/6b637fe0/src/loadCSS.js"></script>
<script src="https://cdn.rawgit.com/filamentgroup/loadCSS/6b637fe0/src/onloadCSS.js"></script>
<script>
      /*!
      loadCSS: load a CSS file asynchronously.
      */
      function loadCSS(href){
        var ss = window.document.createElement('link'),
            ref = window.document.getElementsByTagName('head')[0];

        ss.rel = 'stylesheet';
        ss.href = href;

        // temporarily, set media to something non-matching to ensure it'll
        // fetch without blocking render
        ss.media = 'only x';

        ref.parentNode.insertBefore(ss, ref);

        setTimeout( function(){
          // set media back to `all` so that the stylesheet applies once it loads
          ss.media = 'all';
        },0);
      }
      loadCSS('styles.css');
    </script>
    <noscript>
      <!-- Let's not assume anything -->
      <link rel="stylesheet" href="styles.css">
    </noscript>
6
répondu Amuk Saxena 2017-07-06 12:14:11

moi aussi j'ai lutté avec cette nouvelle métrique pagespeed.

bien que je n'ai trouvé aucun moyen pratique pour obtenir mon score de retour jusqu'à %100, Il ya quelques choses que j'ai trouvé utiles.

la combinaison de tous les css en un seul fichier a beaucoup aidé. Tous mes sites sont de retour à %95 - %98.

la seule autre chose à laquelle je pouvais penser était d'aligner toutes les css nécessaires (qui semble être la plupart - au moins pour mes pages) sur la première page pour obtenir le doux score élevé. Bien qu'il puisse aider votre score de vitesse cela rendra probablement votre chargement de page plus lent cependant.

3
répondu Glipt 2013-09-18 18:38:24

envisagez d'utiliser un paquet pour générer automatiquement des styles inline à partir de vos fichiers css. Un bon est Grunt Critique ou CSS critique pour Laravel .

0
répondu tsveti_iko 2017-04-06 13:11:35