画像の遅延読み込み loading=lazy
ネイティブのloading属性で画面外の画像の読み込みを遅らせます
「画像の遅延読み込み loading=lazy」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
loading属性
<img loading="lazy" src="...">は、画像がビューポートに入る直前までブラウザーが画像のダウンロードを遅らせるよう指示します。最新の主要ブラウザーがすべてネイティブで対応しているため、画像の多いページでは最も簡単にパフォーマンスを向上できます。
「ビューポート付近」の定義
ブラウザーは、小さなヒューリスティック上の余白(通常はフォールド位置より数千ピクセル下)を使用します。ユーザーが画像までスクロールする頃には完全に描画されるよう早めに読み込みを開始するため、丁寧にスクロールするユーザーには遅延読み込みが意識されません。
遅延読み込みを使わない場合
ファーストビュー内の画像や、LCP(Largest Contentful Paint)の候補となる画像には、決してloading="lazy"を設定しないでください。読み込みを遅延させると最も重要な視覚要素の表示が遅れ、体感速度とCore Web Vitalsの両方に悪影響を与えます。
幅と高さの指定が必須
遅延読み込みを効果的に機能させるには、<img>に明示的なwidthとheight(またはaspect-ratio CSS)を指定してください。寸法がないとブラウザーはスペースを確保できず、スクロール時にレイアウトが再配置され、遅延読み込みのヒューリスティックも正しく機能しません。
<img loading="lazy" src="cat.jpg" width="800" height="600" alt="A cat">iframeの遅延読み込み
同じ属性を<iframe>にも使用できます。<iframe loading="lazy">を指定すると、フォールドより下にある地図、動画、ソーシャル埋め込みの読み込みを遅延させられます。これらは通常、ページを表示するたびに数メガバイトのサードパーティーJavaScriptを読み込む要因になります。
eagerがデフォルト
デフォルト値はloading="eager"(すぐに読み込む)で、通常は明示的に記述しません。ファーストビュー内の画像にeagerを設定すると、レビュー担当者にその選択が意図的であることを示すドキュメントとして役立つ場合があります。
srcsetとの併用
遅延読み込みはレスポンシブ画像と完全に組み合わせて使用できます。ブラウザーは引き続きsrcsetから適切な候補を選択し、ダウンロードだけを遅延させます。loading="lazy"とsrcsetの間で追加の調整を行う必要はありません。
<img
loading="lazy"
srcset="img-400.jpg 400w, img-800.jpg 800w, img-1200.jpg 1200w"
sizes="(min-width: 768px) 800px, 100vw"
src="img-800.jpg"
alt="Hero"
width="800" height="600"
>デコードのヒント
遅延読み込みとdecoding="async"を組み合わせると、ブラウザーはメインスレッド外で画像をデコードできます。長いスクロールの後に多数の画像が同時に読み込まれる場合でも、入力処理がブロックされるのを防げます。
背景画像
CSSのbackground-imageはネイティブには遅延読み込みできません。ファーストビュー内のヒーロー背景であれば問題ありませんが、フォールドより下の背景にはIntersectionObserverを使用し、要素がビューポートに近づいたときにURLを設定してください。
印刷時の動作
ページを印刷するとき、ブラウザーはloading="lazy"に関係なくすべての画像を eager に読み込み、印刷物が完全になるようにします。印刷用スタイルシートで遅延読み込み画像を特別扱いする必要はありません。
節約効果の測定
Lighthouseの「Defer offscreen images」監査には、loading="lazy"を設定すべきすべての画像が一覧表示されます。Networkパネルで「Img」に絞り込み、「Waterfall」ビューを表示すると、遅延読み込みによる段階的な読み込みを確認できます。画像ギャラリーでは初期リクエストが大幅に減少します。
理解度チェック
ページ上部のヒーロー画像にloading="lazy"を設定すると、なぜ問題になるのでしょうか。
まとめ
画面外の<img>要素や<iframe>要素にloading="lazy"を設定するだけで、パフォーマンスを向上できます。明示的なwidth/height(スペースを確保するため)、srcset(レスポンシブ対応のため)、decoding="async"(スクロールを滑らかに保つため)と組み合わせてください。LCP画像や初期ビューポートに表示される要素には、決して適用しないでください。
よくある質問
「画像の遅延読み込み loading=lazy」レッスンは無料ですか?
はい。「画像の遅延読み込み loading=lazy」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「画像の遅延読み込み loading=lazy」で何を学びますか?
ネイティブのloading属性で画面外の画像の読み込みを遅らせます ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「画像の遅延読み込み loading=lazy」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- async属性とdefer属性
- Preload、Prefetch、Preconnect
- 画像の遅延読み込み loading=lazy
- リソースヒント modulepreload