「オフスクリーン画像の遅延読み込み」への対策

公開日:2019年11月6日 最終更新日:2020年05月02日

Page Speed Insights 対策の一環.他の対策は以下を見てください.

Page Speed Insights の「改善できる項目」の中の「オフスクリーン画像の遅延読み込み」で
オフスクリーンの非表示の画像は、重要なリソースをすべて読み込んだ後に遅れて読み込むようにして、操作可能になるまでの時間を短縮することをご検討ください。
と言われる場合の対策方法について書く.

オフスクリーン画像の遅延読み込みの必要性

最近,Google 広告の効果を見るためにスクロールを本当にしているのかどうかを確認できるようにタグマネージャの設定を行った.
それを見て驚くのはスクロールする人が本当に少ない驚愕の事実だ.
検索した内容と違っていたのかもしれないが,それにしてもスクロール全くしないの?と驚くほどだ.

つまり,ネット界全体で見たらとんでもない量の無駄な読み込み(パケット通信)が行われている事実に気づく.

「そんなことないでしょ.」と思われた方,ページビューが多いことに満足せず,スクロールしている数を調査してみてほしい.

速度(試験運用版)とは?

サーチコンソール(google search console) に先日から,「速度(試験運用版)」というページが表示されるようになった.

サーチコンソール(速度)

どうやら,ある程度のページビューがないとここには表示されないようだ.

ここに「低速 URL」「中速 URL」「高速 URL」が何件あるかという表示がされている.

さらにここから,下の Page Speed Insight に飛ぶことが可能になっている.
https://developers.google.com/speed/pagespeed/insights/

ここで計測した場合に「改善できる項目」として,「オフスクリーン画像の遅延読み込み」という項目があげられることがある.

オフスクリーン画像とは

これはその名の通り,スクリーンがオフの時に表示されている画像.
つまり,ブラウザの表示されている部分以外に存在している画像のことを指す.

通常,ページをスクロールさせないで全てが読めるページというのはあまりないので,オフスクリーン画像が存在しているページがほとんどだろう.

なので最初に画像があって,その後テキストが続くようなページの場合,オフスクリーン画像があまりないということもある.そのようなページの場合はこのページに書いてある対策をとる必要はない.

遅延読み込みとは

遅延読み込みもその名の通り,遅延させて読み込んでみてはどうか?ということ.
通常,表示されていない画像も読み込みに行ってしまうため,表示されているはずの部分自体の表示自体も遅くなってしまう.

つまり,ある程度長いページ(スクロールさせないとすべてのページが見られないページ)で画像が重かったり,多かったりする場合にはこの方法が読者をイライラさせないためには有効であることが分かる.

すなわち,「オフスクリーン画像の遅延読み込み」とは「画面に表示されていないもの(オフスクリーン)を先に読み込まない(遅延読み込み)ようにしなさい」ということを言っている.

Chrome では簡単に対策出来る
(追記: 2020/03/31)

Page Speed Insights 対策としては以下が一番簡単で chrome 以外のブラウザにも悪影響を及ぼさない方法です.

タグに loading 属性に lazy を入れる.

と書いていたものを

と追記します.

これで chrome の最新版ではネイティブで遅延読み込みに対応してくれます.

簡単に試せますので,画像を大量に使っているページで確認してみましょう.

下の Chrome 以外での改善方法に比較して非常に簡単なので面倒だと思われる場合,この方法だけでも実装しておくとよいでしょう.
少なくとも PageSpeedInsight 対策にはなります.

Chrome 以外での改善策

2020/4 現在,Chrome 以外のブラウザは loading=”lazy” にネイティブ対応していないので他の方法をとるしかない.

調べると Intersection Observer を使えばよいということが分かる.
そこで,Intersection Observer が良さそうなので試してみた
のように自分でスクリプトを書いても良いのだが,
IntersectionObserverベースな、遅延読み込みライブラリのLozad.jsを紹介する」で紹介されている Lozad.js を使ってみることにした.

Lozad.js

Github
https://github.com/ApoorvSaxena/lozad.js
ここの dist にある
lozad.min.js
を右クリックして「名前をつけてリンク先を保存」して手元のパソコンに持ってきてサーバーに上げる.

IE 対策で Polyfill を使う

気を付けるべきこととして Intersection Observer は現時点で IE11 では動かないことがあげられる.
Intersection Observer がどこまで使えるか?
そのような場合は Polyfill を使えばいい.

Polyfill はブラウザが対応していない場合に代わりにその関数を読み込んでくれるもの.

https://polyfill.io/v3/url-builder/
ここで必要なものにチェックを入れて,「Copy HTML to clipboard」を押すと挿入するタグが表示される.

タグを表示させてみると以下のようになる.

このように使う関数のみを指定して無駄なコードを読み込まないように出来る.
使用しているブラウザが Intersection Observer に対応している場合はこの関数は読み込まれない.

しかし,これを読み込んでも IE11 では以下のエラーが出る.

IE 対策で Object assign も入れる

まだ不足しているものがある.
Object assign がどこまで使えるか?

結局,以下のように Object assign も読み込むように変更するとエラーは出なくなった.

以下をヘッダなどに入れる.

つまり,上の行は関数に対応していないブラウザの時に読み込まれるもの.

これで監視する処理を追加しておく.
rootMargin を設定しておくと,表示される少し手前で読み込まれるようになる.

画像のタグは

となっているものを以下のように変更する.

data を data-src に変更し,class に lozad を追加する.

こうすることでブラウザに表示されて初めて data-src が src に代わり読み込まれるようになるので,最初の読み込みが早くなる.

つまり,オフスクリーン(スクリーンに表示されていない)画像の遅延読み込み(実際に表示する際に読み込む)対策となる.

 

Contact

ご質問等ありましたら,下のフォームからお願いします.

 
contact
ノウハウを書籍化!
Pagetop