遅延読み込み
Lazy loading
別名: 遅延読み込み、レイジーロード、Lazy load、Lazy loading
生態(さわってみる)
一言定義
画像などの重いリソースの読み込みを、実際に画面へ表示される直前まで遅らせる表示最適化のUI・実装パターン。
分類
使う場面
- 画像や動画を多用する長いページで、初期表示速度と通信量を抑えたいとき
- ユーザーがスクロールして到達するまで実際には見られない領域が多いページ
避ける場面
- ファーストビュー内の画像(多くの場合LCP計測対象)。遅延させるとかえって表示が遅く見える
- 件数が少なく、全件を先読みしてもコストがほとんど変わらないとき
近縁種との比較
遅延読み込みは<img loading="lazy">のようにブラウザ標準機能として実装できる場面が増えており、その意味で本図鑑の他の多くのUIパターンより「実装パターン」寄りの性格を持つ(研究ノートの出典欄も個別の設計指針ではなく実装パターンとして扱う)。無限スクロールとは、どちらもスクロール位置に応じて何かを後から読み込む点が似ているが、無限スクロールが一覧の末尾に「新しい項目そのもの」を追加取得するのに対し、遅延読み込みは既にDOM上にある要素の中身(画像等のリソース)の取得タイミングを遅らせるだけで、項目数自体は増えない。スケルトンスクリーンとは、読み込み中の見え方を扱う点で近いが、スケルトンスクリーンは読み込み完了前のレイアウトを予告する表示そのものであり、遅延読み込みはその読み込みをいつ開始するかというトリガーの設計である。
実例リンク
アクセシビリティ
- role
- 読み込み前後でalt属性の内容は変えない。読み込み中のプレースホルダー自体に意味のあるroleは不要(装飾的なため)
- キーボード操作
- 遅延読み込み自体はキーボード操作を伴わない。読み込み前後でレイアウトが動かないよう、width/height(またはaspect-ratio)を事前に確保する
- 補足
- 画像・iframeは`loading="lazy"`属性でブラウザネイティブに対応しており、多くの場面でIntersectionObserverによる自前実装は不要になっている。ファーストビューの画像には`loading="lazy"`を付けない(LCPを悪化させるため)