画像のデコーディングは通常HTMLのパース処理に含まれているため、大きな画像はメインスレッドをブロックする原因になる。
これを改善するためにdecoding=asyncやloading=lazyが存在する。
HTMLのパース処理 → 「バックグラウンドプロセスで画像のダウンロード開始」 → CSSのパース処理 → スタイルの再計算 → レイアウト処理
CSSのパース処理やスタイルの再計算をブロックしないため、スムーズにWebページの表示が行われる。
ページ全体がファーストビューに収まるようなサイトではloading=lazyと比べてUXが向上する。
HTMLのパース処理 → CSSのパース処理 → スタイルの再計算 → レイアウト処理 → 「バックグラウンドプロセスで画像のダウンロード開始」
CSSのパース処理やスタイルの再計算をブロックしないため、スムーズにWebページの表示が行われる。
viewportに含まれる画像が非常に多い場合、レイアウト処理などが終わってからの読込になるため遅くなってしまう。decoding=asyncを使った方が良い。
逆にviewportに含まれる画像が少なく、縦に長いようなWebページでは効率的な読込が可能。
なお、loading属性をサポートしているChrome/Operaなどでdecodingとloadingを併記した場合、loadingが優先される。
リソースをfetchする優先度を示すことができる
なるべく表示されていてほしい画像、例えばHero Imageに有効
iframeやlink、scriptにも使える
decoding=asyncとloading=lazyを併記すると、loading="lazy"が使用できる場合、loading="lazy"が優先される