1. ホーム
  2. Web制作
  3. html5

ウェブサイトパフォーマンスのための画像読み込みを遅らせる5つのコツ(要約)

2022-01-12 16:56:36

画像はWeb上で最も人気のあるコンテンツの1つであるため、Webサイトのページロード時間が問題になりやすいと言えます。

適切な最適化を行っても、画像はかなり重くなることがあります。これは、訪問者がWebサイトのコンテンツにアクセスするまでの待ち時間に悪影響を及ぼす可能性があります。スピード感を損なわないような画像の読み込み方法を考えなければ、訪問者は我慢できず、他のサイトへ移ってしまう可能性が高いのです。

この記事では、Web最適化ツールキットに追加して、サイトのユーザー体験を向上させることができる、画像の読み込みを遅延させる5つの方法について学びます。

遅延読み込みとは?

画像の遅延読み込みとは、ウェブサイト上の画像を非同期に読み込むことです。つまり、ウェブサイト上の折りたたみコンテンツが完全に読み込まれた後、あるいはブラウザの表示領域に表示されたときにのみ、条件付きで読み込むことを意味します。つまり、ページの下に配置された画像は、ユーザーが下までスクロールしないと読み込まれないということです。

多くのサイトでこの方式が採用されていますが、特に画像を多用するサイトでは顕著になります。お気に入りのオンライン検索サイトで高解像度の写真を閲覧してみると、そのサイトが限られた数の画像しか読み込んでいないことにすぐに気がつくはずです。ページをスクロールしていくと、プレビュー用のプレースホルダー画像がすぐに実際の画像で埋まっていくのがわかるでしょう。例えば、unsplash.comの読み込み手順を見てみましょう。ページをスクロールして表示させると、次の場所でプレースホルダーがフル解像度の写真に置き換わります。

なぜ画像の読み込みの遅れを気にする必要があるのでしょうか?

あなたのサイトで画像の遅延ロードを考慮する理由は、少なくとも2つあります。

  • あなたのサイトがJavaScriptを使ってコンテンツを表示したり、ユーザーに何らかの機能を提供したりする場合、DOMを非常に速く読み込むことが重要になります。スクリプトは通常、DOMが完全に読み込まれるまで待ってから実行されます。画像を多用するサイトでは、読み込みの遅れや、画像の非同期読み込みが、ユーザーの滞在時間や離脱時間の差になることがあります。
  • ほとんどの遅延ロードソリューションは、ユーザーがビューポートに表示される位置までスクロールしたときにのみ画像をロードするため、ユーザーがその位置に到達しない場合は画像がロードされることはありません。これは、帯域幅の大幅な節約を意味し、ほとんどのユーザー、特にモバイル機器や低速接続でウェブにアクセスしているユーザーは、そのことに感謝することでしょう。

さて、画像の読み込みを遅らせることは、サイトのパフォーマンスに貢献しますが、どのような方法があるのでしょうか?

完璧な方法というのはありません。

もしあなたがJavaScriptを使っているなら、独自の遅延読み込みソリューションを実装することは問題ないでしょう。自分でコードを書くことで、より多くの制御が可能になります。

あるいは、ウェブを見て、実行可能な方法を探し、それを使い始めることもできます。私はそうして、次の5つの興味深いヒントに出会いました。

1 Intersection Observer APIを利用した遅延ローディング

Intersection Observer APIは、画像やその他のコンテンツの読み込みを遅延させるために使用できるモダンなインターフェイスです。

MDNでは、このAPIをこんな風に紹介しています。

Intersection Observer API は、ターゲット要素と祖先要素またはトップレベルのドキュメントビューポートとの交差を非同期に観測する方法を提供します。
つまり、非同期観測は、ある要素と他の要素との交差を観測するものである。

Denys Mishunovは、交差点オブザーバとそれを使った遅延ロード画像の両方について素晴らしいチュートリアルを用意しています。彼のソリューションはこんな感じです。

画像ギャラリーを遅延ロードさせたいとします。各画像のマークアップは以下のようになります。

s = '\xe9\x9d\x92\xe8\x9b\x99\xe7\x8e\x8b\xe5\xad\x90'

画像へのパスがsrc属性ではなく、data-src属性に含まれていることに注意してください。これは、srcを使用すると画像がすぐに読み込まれるため、必要な処理が行われないからです。

CSS では、各画像に 100px の min-height 値を割り当てることができます。これは、各画像プレースホルダ(src 属性のない img 要素)の縦方向の寸法を提供します。

ss = s.encode('raw_unicode_escape')

JavaScriptドキュメントで、次に設定オブジェクトを作成し、でintersectionObserverのインスタンスに登録します。

print(ss) # Result: b'\xe9\x9d\x92\xe8\x9b\x99\xe7\x8e\x8b\xe5\xad\x90'

最後に、すべての画像を反復処理し、この iterationObserver インスタンスに追加します。

sss = ss.decode()

このソリューションの利点は、実装が簡単であること、効率的であること、そして計算の面で多くの仕事をintersectionObserverにさせることができることです。

一方、ほとんどのブラウザの最新バージョンでは交差点オブザーバーAPIをサポートしていますが、すべてのブラウザが一貫してサポートしているわけではありません。幸いなことに、ポリフィルが用意されています。

2 ロビン・オズボーンの順次強化されたディファードローディング

Robin Osborneは、プログレッシブ・エンハンスメントに基づく超賢明な解決策を考え出しました。この場合、JavaScriptを使って実装された遅延ロードそのものが、通常のHTMLとCSSの拡張機能であると考えられています。

プログレッシブ・エンハンスメントの理由?では、JavaScriptを使ったソリューションで画像を表示した場合、JavaScriptが無効になっていたり、エラーが発生してスクリプトが正常に動作しない場合はどうなるのでしょうか?この場合、プログレッシブエンハンスメントを使用しなければ、ユーザーは画像をまったく見ることができない可能性が高くなります。クールではありませんね。

このPenでは、Osborneの基本的な解決策の詳細を見ることができます。別のPenでは、壊れたJavaScriptを考慮した、より包括的な解決策を見ることができます。

この手法には多くの利点があります。

    {を使用します。 インクリメンタル・エンハンスメントのアプローチにより、ユーザーは常にコンテンツにアクセスすることができます。
  • JavaScriptが利用できないときだけでなく、JavaScriptがクラッシュしたときにも機能します。特に多くのスクリプトを実行する環境では、エラーが起こりやすいことは誰もが知っていることでしょう。 {特に多くのスクリプトを実行する環境では、エラーが起こりやすいことは周知の事実です。
  • スクロールする画像の読み込みを遅延させ、ユーザーがブラウザのある位置までスクロールしない場合、すべての画像が読み込まれないようにするものです。
  • 外部依存がないため、フレームワークやプラグインが不要です。

3 Lozad.js

画像の遅延ロードを実装するための迅速で簡単な代替案は、JSライブラリにほとんどの作業を任せることです。

Lozad は高性能、軽量で設定可能なディファードローダで、依存性のない純粋な JavaScript でできています。画像、動画、iframe などの読み込みを遅延させたり、Intersection Observer API を使用するために使用することができます。

You can include Lozad using npm / Yarn and import it using the module bundler of your choice at.

print(ss)

Alternatively, you can simply load the library using the CDN and add it to the bottom of the HTML page in the