Optimisation de la livraison CSS: comment reporter le chargement css?
j'essaie de optimiser la livraison CSS en suivant la documentation de google pour les développeurs https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery#example
comme vous pouvez le voir dans l'exemple de lining un petit fichier CSS le CSS critique inlined dans la tête et le petit original.css est chargé après onload de la page .
<html>
<head>
<style>
.blue{color:blue;}
</style>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
My question concernant cet exemple:
comment charger un grand fichier css après avoir chargé la page?
5 réponses
si cela ne vous dérange pas d'utiliser jQuery, voici un simple extrait de code pour vous aider. (Sinon, commentez et j'écrirai un exemple pur-js
function loadStyleSheet(src) {
if (document.createStyleSheet){
document.createStyleSheet(src);
}
else {
$("head").append($("<link rel='stylesheet' href='"+src+"' type='text/css' media='screen' />"));
}
};
il suffit de l'appeler dans votre fonction $(document).ready()
ou window.onload
et vous êtes prêt à partir.
Pour le #2, pourquoi ne pas l'essayer? Désactiver Javascript dans votre navigateur et voir!
à propos , il est étonnant de constater à quel point une simple recherche sur google peut être vous; pour la requête "post load css"
, c'était la quatrième coup...
http://www.vidalquevedo.com/how-to-load-css-stylesheets-dynamically-with-jquery
une petite modification à la fonction fournie par Fred pour la rendre plus efficace et libre de jQuery. J'utilise cette fonction dans la production pour mes sites web
// to defer the loading of stylesheets
// just add it right before the </body> tag
// and before any javaScript file inclusion (for performance)
function loadStyleSheet(src){
if (document.createStyleSheet) document.createStyleSheet(src);
else {
var stylesheet = document.createElement('link');
stylesheet.href = src;
stylesheet.rel = 'stylesheet';
stylesheet.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(stylesheet);
}
}
en plus de la réponse de Fred:
Solution à l'aide de jQuery et Noscript
<html>
<head>
<style>
.blue{color:blue;}
</style>
<script type="text/javascript" src="../jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
if($("body").size()>0){
if (document.createStyleSheet){
document.createStyleSheet('style.css');
}
else {
$("head").append($("<link rel='stylesheet'
href='style.css'
type='text/css' media='screen' />"));
}
}
});
</script>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
de http://www.vidalquevedo.com/how-to-load-css-stylesheets-dynamically-with-jquery
utilisant pur Javascript & Noscript
<html>
<head>
<style>
.blue{color:blue;}
</style>
<script type="text/javascript">
var stylesheet = document.createElement('link');
stylesheet.href = 'style.css';
stylesheet.rel = 'stylesheet';
stylesheet.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(stylesheet);
</script>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
Essayez cet extrait de
le auteur affirme qu'il a été publié par L'équipe PageSpeed de Google
<script>
var cb = function() {
var l = document.createElement('link'); l.rel = 'stylesheet';
l.href = 'yourCSSfile.css';
var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h); };
var raf = requestAnimationFrame || mozRequestAnimationFrame ||
webkitRequestAnimationFrame || msRequestAnimationFrame;
if (raf) raf(cb);
else window.addEventListener('load', cb);
</script>
avertissement: body{background-image: url("http://example.com/image.jpg");}
dans les fichiers css rendra vos fichiers CSS toujours rendre-blocage.
si vous avez essayé toutes les solutions ci-dessus et que vous recevez toujours l'avertissement de blocage des rendus de PageSpeed insights, alors vous avez probablement cette règle de style dans vos fichiers css. Après des heures de tests, il s'avère que cette règle est ce qui fait que tout de mon css doit être signalé comme des ressources de blocage des rendus à PageSpeed insights. J'ai trouvé le même problème a été discuté avant .
Je ne sais pas pourquoi body{background-image: url(...)
faites ça pour tous les fichiers css!, bien que j'ai différentes ressources d'images dans le fichier pour les boutons, icônes, ...etc.
j'ai corrigé ceci en déplaçant cette règle du fichier .css
et en la mettant dans les styles inline. Malheureusement, vous aurez à briser votre plan css et mettre la règle dans tous vos layouts fichiers HTML au lieu d'être dans 1 fichier css qui est importé dans toutes vos mises en page HTML, mais les années 90 et la couleur verte dans PageSpeed insights le méritent.