1. このページの目的
ファーストビュー上の画像が LCP element に選ばれた状況で、loading
属性値によってどう変化が現れるか?観察する。
2. ポイント
- 画像をリクエストするタイミング。HTMLをパースして画像を見つけた段階でリクエストしているか?
- 画像を早くダウンロードさせたいなら、
<link rel="preload" .../>
を記述すればよい。 importance="high"
属性も使える?
3. 結果
3-1. 画像ファイルへリクエストが発生するタイミング
loading="lazy"
を指定すると、画像ファイルへリクエストするタイミングが遅くなった。loading
なしだと、HTMLパースの途中で画像ファイルのリクエストが開始される。loading="eager"
を指定した場合は、loading
なしの場合と同じだった。<link rel="preload" .../>
を指定すると、ブラウザに画像の存在を早いタイミングで知らせることができるが、すぐにダウンロードが開始されるわけではなく、loading
なしの場合との明確な違いが分からなかった。
Chrome DevTools [Performance] パネル
画像へのリクエストが発生したタイミングを見てみた。
以下のスクリーンショットはスケールが異なるため比べにくいが、HTMLのパース(水色の四角)が左から始まってから、どのくらいで画像へのリクエストが発生したかを比較している。
早い方から順に以下となっている。
(1) <link rel="preload" ...>
(HTMLパースより先に発生する)
(2) loading="eager"
(3) loading なし
(4) loading="lazy"
3-2. LCP の値について
loading
属性値や<link rel="preload" ...>
を試したりしたが、明確な差はなかった。
4. 考察
loading="lazy"
は HTMLに書いてあるので、ブラウザがHTMLをパースした時点で「指定されていること」は認識するはずである。ファーストビュー内に表示される計算結果が出た時点で、loading="lazy"
の対象ではなくなるはず。
5. 結論
- ファーストビューに表示され、LCP element になりそうな画像には
loading="lazy"
を指定しない方が良い。
6. メモ
<h1>
タグ内の文字列が長いと、画像よりもこちらが LCP element になるようだ。