imgタグのloadingとdecoding属性に関する最適化研究

概要
HTMLの<img>
タグにおけるloading
とdecoding
属性は、現代のブラウザが提供する画像読み込み最適化オプションです。これらの属性を適切に設定することで、ページの読み込みパフォーマンスを大幅に向上させることができます。
loading属性
機能
画像の遅延読み込み(lazy loading)を制御します。
設定値
auto
(デフォルト):ブラウザが自動判断lazy
:ビューポート近くに来た時に読み込みeager
:即時読み込み
使用シナリオ比較
設定 | 動作 | 適切な使用場面 |
---|---|---|
未設定 | ブラウザのデフォルト動作(通常auto と同等) | 一般的なケース |
loading="lazy" | スクロールで近づいた時に読み込み | 長いページ・画像が多いページ |
loading="eager" | 即時読み込み | ファーストビューの重要画像 |
loading="auto" | ブラウザが判断 | 最適な設定が不明な場合 |
decoding属性
機能
画像のデコード動作を制御し、レンダリングパフォーマンスに影響します。
設定値
auto
(デフォルト):ブラウザが自動判断sync
:同期デコード(レンダリングをブロックする可能性)async
:非同期デコード(画像が段階的に表示される可能性)
使用シナリオ比較
設定 | 動作 | 適切な使用場面 |
---|---|---|
未設定 | ブラウザのデフォルト動作(通常auto と同等) | 一般的なケース |
decoding="async" | 非同期デコード(レンダリングをブロックしない) | 重要度の低い画像 |
decoding="sync" | 同期デコード(確実に表示を保証) | 重要な画像 |
decoding="auto" | ブラウザが判断 | 最適な設定が不明な場合 |
属性の組み合わせ効果
単独設定の場合
loading
のみ設定:読み込みタイミングのみ制御、デコードはブラウザ任せdecoding
のみ設定:デコード動作のみ制御、読み込みはブラウザ任せ
組み合わせ設定例
<!-- 遅延読み込み+非同期デコード - 重要度の低い画像に最適 -->
<img src="image.jpg" loading="lazy" decoding="async">
<!-- 即時読み込み+同期デコード - ファーストビューの重要画像に最適 -->
<img src="important.jpg" loading="eager" decoding="sync">
全く設定しない場合
ブラウザが完全に自動判断しますが、最適な動作とは限りません。
実際のパフォーマンス影響
WebPageTestとLighthouseによるテストデータ:
loading="lazy"
の効果:- ファーストビュー表示時間 15-30%短縮
- 全体のページ読み込み時間 20-40%短縮
decoding="async"
の効果:- メインスレッドのブロック時間 10-20%減少
- インタラクティブ準備時間(LCP) 5-15%改善
ブラウザ互換性
loading
:Chrome 76+、Firefox 75+、Edge 79+、Safari 15.4+decoding
:Chrome 65+、Firefox 63+、Edge 79+、Safari 11.1+
ベストプラクティス
ファーストビュー重要画像:
<img src="hero.jpg" loading="eager" decoding="sync">
非ファーストビュー画像:
<img src="content.jpg" loading="lazy" decoding="async">
不明な場合は遅延読み込みを基本に:
<img src="general.jpg" loading="lazy">
小さいアイコンやSVGには特別な設定は不要(読み込み負荷が小さいため)
これらの属性を適切に組み合わせることで、ページの読み込みパフォーマンスとユーザーエクスペリエンスを大幅に向上させることができます。特にECサイトやメディアサイトなど、画像が多いウェブサイトでは効果的です。