かとう
BLOG

pagespeedinsightsで『レンダリングを妨げるリソースの除外』する #1

JavaScript(JS)を遅延ロードする
 
PageSpeed Insightsで指摘される『レンダリングを妨げるリソースの除外』を解消する方法を紹介します。
 
『レンダリング』とは『≒画像なども含めてページを表示する』ことをいいます。
 
ブラウザはレンダリングのために、HTMLを解析しDOMツリー(※1)を構築していきますが、その途中に<script>が見つかると、解析を中断し<script>(※2)を実行します。
 
なので、何も対策がされていない<script>の数だけHTMLの解析が中断され、レンダリングまでの時間がどんどん遅くなってしまいます。
 
※1 このとき構築したDOMツリーは、開発者ツールのElementsタブから確認することができます。
※2 src属性が付いている場合は、ファイルを読み込みます。
 
今回は、『レンダリングを妨げるリソースの除外』の中で<script>が原因になっている部分を解消していきます。

デフォルト(同期読み込み+都度実行)

この状態では、先ほどの説明どおり、HTMLの解析を中断し/js/example.jsを読み込み、中に書かれているJavaScriptが実行されます。

async属性(非同期読み込み+都度実行)

async属性を付けることで、非同期読み込みに変わり、HTMLの解析を中断しなくなります。
 
ただし、読み込みが完了すると実行してしまうので、そのタイミングでHTMLの解析が完了していないと、解析が中断されてしまいます。
 
また、複数のファイルを読み込んでいる場合、それぞれのタイミングで実行するため、<script>を記述(出現)した順番と実行される順番はバラバラになります。
 
なので、ライブラリなどの実行の順番が重要になるものは、下記のdefer属性を使います。
 
/js/example-1.js

defer属性(非同期読み込み+遅延実行)

defer属性を付けることで、読み込みが完了しても、HTMLの解析が完了するまで実行しないので、解析が中断されることは無くなります。
 
実行の順番は<script>を記述(出現)した順番と同じになります。

それぞれのパターンで、読み込みと実行を図にすると以下のようになります。
非同期読み込みをすることで短縮されているのがイメージできたと思います。

その他(遅延読み込み+都度実行)

非同期読み込みとは違いますが、ユーザがスクロールやキー操作など、アクションを起こすまで、読み込まない方法です。

無料お見積もり・
お問い合わせ

お見積もり・お問い合わせ・ミーティングは無料です。
正式にご注文頂くまで費用は発生しませんのでご安心ください。
まずはお気軽にご相談ください。