Comment charger un CSS de manière Asynchrone
Je suis en train d'essayer d'éliminer les 2 fichiers CSS sont rendu blocage sur mon site, ils apparaissent sur Google Page Speed Insights. J'ai suivi les différentes méthodes, dont aucun n'a été un succès. Mais, récemment, j'ai trouvé un post sur La Pensée Async et quand j'ai appliqué ce code: <script async src="https://third-party.com/resource.js"></script>
il l'a fait éliminer le problème.
Cependant, après la publication, la page perdue le style. Je ne suis pas trop sûr de ce qui se passe parce que le code fonctionne, mais c'est le style après le téléchargement qui ne fonctionne pas. Vous remercie de votre aide avec cela. Grâce
- Faites-vous une demande asynchrone à des styles ou des scripts? Le style des charges peu de temps après que vous avez chargé la page ou il n'apparaît jamais?
- J'ai appliqué l'attribut async, les styles et les a placés dans l'en-tête.
- La chose avec des styles est qu'une re-rendu sera déclenchée si vous chargez la fin (par exemple, dans le corps), et n'est pas autorisé dans les normes (mais depuis que les navigateurs sont très indulgents il fonctionnera de toute façon). Si le problème est la lenteur du temps de réponse d'un serveur d'un tiers, peut-être vous pouvez simplement héberger sur votre serveur à la place?
Vous devez vous connecter pour publier un commentaire.
L'astuce pour le déclenchement de l'asynchrone télécharger la feuille de style est d'utiliser un
<link>
élément et réglez une valeur non valide pour l'attribut media (je suis à l'aide de media="none", mais quelle valeur à faire). Lorsqu'une requête de support a la valeur false, le navigateur sera toujours télécharger la feuille de style, mais il ne peut pas attendre pour que le contenu soit disponible avant le rendu de la page.Une fois la feuille de style a fini de télécharger le media attribut doit être défini à une valeur valide donc les règles de style sera appliqué au document. L'événement onload est utilisé pour changer les médias de la propriété à tous:
Cette méthode de chargement des CSS livrera le développement d'un contenu pour les visiteurs beaucoup plus rapide que la méthode classique. Critique CSS peut être servi avec de l'habitude de blocage de l'approche (ou vous pouvez l'inclure pour des performances optimales) et non-critiques styles peuvent progressivement être téléchargées et appliquées plus tard dans l'analyse /processus de rendu.
Cette technique utilise du JavaScript, mais vous pouvez répondre pour les non-JavaScript des navigateurs en enveloppant l'équivalent de blocage
<link>
éléments dans un<noscript>
élément:Vous pouvez voir l'opération en http://www.itcha.edu.sv
Source dans http://keithclark.co.uk/
Précontrainte
Vous pouvez maintenant utiliser le
précontrainte
mot clé pourlink
éléments.Sync version:
Async version:
Note
Cette fonctionnalité récemment devenu largement pris en charge parmi les navigateurs modernes. Si vous avez besoin de base pour les navigateurs plus anciens, utiliser loadCSS.
Mise à jour (07/18)
Cette fonctionnalité a été désactivée par défaut dans Firefox. Jusqu'à ce que Firefox implémente une solution, loadCSS (mentionné ci-dessus) est probablement votre meilleur pari. Commentaire ci-dessous prise de cette discussion:
vous pouvez essayer de l'obtenir dans beaucoup de façons :
1.À l'aide de
media="bogus"
et un<link>
au pied2.Insertion des DOM dans l'ancienne
3.si vous pouvez essayer de plugins que vous pourriez essayer
loadCSS
<script>
à<style rel=stylesheet>
? (Juste curieux. Je vais utiliserloadCSS
(c'est à dire votre exemple 3) au lieu de cela, si j'ai besoin de charger CSS plus tard.)La fonction ci-dessous permettra de créer et d'ajouter au document toutes les feuilles de style que vous souhaitez charger de manière asynchrone. (Mais, grâce à la
Event Listener
, il suffira de le faire après tout de la fenêtre, d'autres ressources ont chargé.)Voir la suivante:
var newStyle = document.createElement("link"); newStyle.rel = "stylesheet"; newStyle.href = "stylesheet.css"; document.getElementsByTagName("head")[0].appendChild(newStyle);
à l'intérieur de la<script>
balise dans la page de corps fait son travail parfaitement, même dans les vieux navigateurs comme MSIE8.window.load
événement. Ainsi, le téléchargement commence lorsque tout est téléchargé. Pas de chance là-bas. Vous avez besoin non bloquant le chargement dès que possible pour commencer.Si vous avez un strict contenu de la politique de sécurité qui ne permet pas de @vladimir-salguero's réponse, vous pouvez utiliser ce (veuillez prendre note de l'script
nonce
):Il suffit d'ajouter les lignes suivantes à votre feuille de style référence:
media="none" data-async="true"
. Voici un exemple:Exemple pour jQuery:
async
attribut est ignoré, comme la balise de script n'a pas unsrc
pour charger de manière asynchrone... ou est-il vraiment utile ici? Aussi pouvez-vous élaborer un peu plus sur la valeur à utiliser comme unnonce
?Veuillez mettre à jour la réponse à tous les ci-dessus ne parvient pas à impressionner google pagespeed insights maintenant.
Selon Google c'est la façon dont vous devriez mettre en œuvre chargement asynchrone de Css