これは、ページを開いた時の画面で見えない画像はダウンロードせず、スクロールした時に適宜ダウンロードして表示させるというものです。
当ブログでも画像を使うことが多いため、よく指摘を受けてしまいます。
今回、lozad.jsという物を使い、画像の遅延読み込みに対応できましたのメモを残しておきます。
また、オフスクリーン画像の遅延読み込みに対応すると、以下の指摘も出なくなりましたので、やる意味は大いにあります。
- 適切なサイズの画像
- 効率的な画像フォーマット
テンプレートの編集
まず、<head>タグの中に以下を追加。<script async='async' src='https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js' type='text/javascript'/>
次に、</html>の直前に以下を追加。
<script type='text/javascript'> const observer = lozad(); observer.observe(); </script>
トップページのサムネイルも対応させる場合は以下を変更。
<img expr:src='data:post.firstImageUrl'/> ↓ <img class='lozad' expr:data-src='data:post.firstImageUrl'/>
各記事の編集
後は、各記事の<img>タグを編集。<img src="image.png" /> ↓ <img class="lozad" data-src="image.png" />
Youtube等のiframeの遅延読み込みも可能。
<iframe allowfullscreen="" src="https://www.youtube.com/embed/VgzOLUqEdLA" frameborder="0" height="270" width="480"></iframe> ↓ <iframe allowfullscreen="" class="lozad" data-src="https://www.youtube.com/embed/VgzOLUqEdLA" frameborder="0" height="270" width="480"></iframe>
pictureタグの場合。
これだとIEでもpictureタグ内にimgタグが無くても画像表示できます。
<picture class='lozad' data-alt='test' data-iesrc='gazou.png' style='display: block; min-height: 1rem'> <source media='(max-width: 480px)' srcset='gazou_480.webp' type='image/webp'/> <source media='(max-width: 896px)' srcset='gazou_896.webp' type='image/webp'/> <source srcset='gazou.webp' type='image/webp'/> <source media='(max-width: 480px)' srcset='gazou_480.png' type='image/png'/> <source media='(max-width: 896px)' srcset='gazou_896.png' type='image/png'/> <source srcset='gazou.png' type='image/png'/> </picture>
ただ、Bloggerでは記事の最初の画像(アイキャッチ画像?)は遅延読み込みしない方が良いです。
それは編集するとサムネイルが表示されなくなるからです。
追記
lozad.js v1.11.0 以降では、以下のエラーが出て、IE11で画像を読み込めません。オブジェクトは 'assign' プロパティまたはメソッドをサポートしていません。
IE11で遅延読み込みを行うには、v1.10.0が良いです。