定義
遅延読み込み(レイジーローディング / Lazy Loading)とは、Webサイトやアプリを開いたときにすべてのデータ(画像、動画、プログラムコード)を一度に読み込まず、画面に表示される瞬間や実際に必要になったタイミングに合わせて後から読み込む最適化技術です。
なぜ最初から全部読み込まないの?
本を読むとき、私たちは今読んでいるページだけを開きますよね。1000ページもある分厚い百科事典のすべてのページを、床一面に広げてから読み始める人はいません。
インターネットの世界でもまったく同じことが言えます。写真が100枚も並ぶショッピングサイトにアクセスしたとき、訪問者は一番上にある数個の商品をチラッと見ただけで、すぐにページを閉じてしまうかもしれません。
もしWebサイトが、開いた瞬間に100枚の高画質な写真をすべてダウンロードしようとしたらどうなるでしょうか。通信回線を取り合ってしまい、肝心の最初の画面の写真すらなかなか表示されなくなってしまいます。見もしない写真のために、大切なスマホのデータ通信量(ギガ)を消費してしまうことにもなります。そこで遅延読み込みを使い、画面に今見えている部分だけを最優先で素早く読み込み、画面外の写真は後回しにして賢く待機させておくのです。
スクロールすると魔法のように現れる
遅延読み込みが設定された画面の下の方には、重たい本物の写真の代わりに、容量がごくわずかな空の枠やぼかした仮の画像(プレースホルダー)があらかじめスタンバイしています。
ユーザーが指で画面をスーッと下へスクロールし始めると、ブラウザは「今どのあたりを見ているか」というスクロール位置をせっせと監視します。
そして特定のエリアが画面に入りそうになった直前、ブラウザがサーバーへ合図を送り、そこで初めて本物の高画質画像がすっと読み込まれます。この仕組みのおかげで、ユーザーは最初の画面を一瞬で表示でき、Webサイトを運営する側も、見られない写真まで送らずに済むため、無駄なデータ転送量やサーバーへの負担を減らすことができます。
もう少し詳しく言うと
遅延読み込みは、目に見える写真や動画ファイルだけに用いる技術ではありません。もう少し詳しく言うと、アプリやWebページを動かす巨大なプログラムコードそのものにも広く使われています。
最近のWebサイトは、たくさんの機能を備えた一つの巨大なソフトウェアのようになっています。しかし、買い物を少し眺めてすぐ帰るかもしれないユーザーに対して、ページを開いた瞬間に使わない決済機能や会員情報の変更コードまでダウンロードさせる必要はまったくありません。
そこで開発者は、プログラム全体を細かく分割し、ユーザーが購入手続きなどのボタンを押したまさにその瞬間に、該当する機能のコードを読み込ませるように作ります。このように必要なタイミングで必要なコードのかけらだけを取得する手法は、最初に読み込んで実行するコード量を減らして初期表示を高速化し、使わない機能による通信量や端末リソースの無駄遣いも防いでくれるのです。
よくある誤解
遅延読み込みを使えば、Webページの総データ通信量が必ず半分に減る。
ページの一番下までスクロールしきった場合、最終的にはすべてのデータをダウンロードすることになります。遅延読み込みの本質はデータ総量を減らすことではなく、「必要な瞬間まで通信を先延ばしにして、最初の表示をすばやく完了させること」にあります。
日常で出会う場面
InstagramやXなどのSNSで、タイムラインを下にスクロールするたびに新しい画像がスムーズに読み込まれる。
ECサイトの商品ページを開いたとき、まず説明文が表示され、スクロールするにつれて下のレビュー写真が順番に表示される。
つまり ひとことで
すべてのデータを一度に受信せず、画面に表示される瞬間や必要になったタイミングに合わせて小分けに取得する表示速度の最適化技術です。