CSSを非同期で読み込んで高速化
Lighthouseのパフォーマンススコアの「レンダリングをブロックするリソースを排除する」に対応するための対策方法をメモ。
media=”print” onload=”this.media=’all'”をつける方法
もっとも簡単な方法です。
<link rel="stylesheet" href="/path/to/my.css" />
これに、media="print" onload="this.media='all'"
を加えて以下のようにします。
<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'" />
Preloadを併用する方法
Preloadは対応していないブラウザがあるので、併用が必要。
<link rel="preload" href="/path/to/my.css" as="style"> <link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">
Javascriptを使用する方法
// make a stylesheet link var myCSS = document.createElement( "link" ); myCSS.rel = "stylesheet"; myCSS.href = "mystyles.css"; // insert it at the end of the head in a legacy-friendly manner document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling );
または、
<script type="text/javascript"> var delaycss = document.createElement('link'); delaycss.rel = 'stylesheet'; delaycss.href = '/path/to/delaystyle.css'; document.head.appendChild(delaycss); </script>
loadCSS.jsを使う方法
大抵のブラウザで使えるらしい。
<link rel="preload" href="index.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="index.css”></noscript> <script src="loadCSS.js"></script> <script> loadCSS( "path/to/mystylesheet.css" ); </script>
以下を参考にする。
jQueryでCSSを遅延読み込みする方法
<link id="lazyCss" href="lazy.css" rel="subresource"> <script> $(function(){ // CSS遅延読み込み $('#lazyCss').attr('rel', 'stylesheet'); }); </script>
以下では複数のCSSとJSをまとめて非同期で読み込むスクリプト例を掲載しています。
- 複数のJSとCSSをまとめて非同期で読み込むJavascriptのメモ – QWERTY.WORK
- 外部JavaScriptやcssファイルを動的に読み込み(遅延読み込み)HTMLページ描画を高速にする
気になること
CSSを非同期で読み込んでも、そのCCSに実際には使用しないスタイルが含まれていることがあります。その場合、Lighthouseの「未使用のCSSを減らす」に警告が残ります。これを防ぐためには、不要なスタイルを削除したり、分割したりする必要がありますが、それに手間をかけれないので、これは放置するしかないでしょう。