LCP（Largest Contentful Paint）

# LCP（Largest Contentful Paint）
## とは何か
[`LCP（Largest Contentful Paint）`](https://web.dev/lcp/)とは、「Webページのメインコンテンツがどれだけ速くロードされ、ユーザがそれを視認できるか」を計測することを企図した指標。
ページ読み込みのパフォーマンスを計測する指標であり、「[見た目上の表示速度](https://web.dev/user-centric-performance-metrics/#types-of-metrics)」を測る指標の1つである。

具体的には、「現在表示されている画面範囲（ビューポート）内で最も大きな画像もしくはテキストブロックが表示されるまでの、初期ロード開始時点からの経過時間」とされている。

`LCP`の目標タイムとしては、**2.5秒以下**が[望ましいとされる](https://web.dev/lcp/#what-is-a-good-lcp-score)。
また、このタイムをほとんどのユーザで体験できることを目指すのであれば、ページロードにおいて75[パーセンタイル](https://www.google.co.jp/search?q=%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%AB)に当たるところが良い閾値となるとのこと。

## 「最も大きな画像もしくはテキストブロック」というのは、何を以って決まるのか
まず、対象となる要素は

- `<img>`要素
- `<svg>`内の`<image>`要素
- `<video>`要素（[poster](https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#attr-poster)画像が指定されているもの）
- CSSの[`url()`](https://developer.mozilla.org/ja/docs/Web/CSS/url)関数でbackground画像が指定されている要素
- テキストノードもしくは他のインラインレベルテキスト要素を子に含む[ブロックレベル要素](https://developer.mozilla.org/ja/docs/Web/HTML/Block-level_elements)

と[説明されて](https://web.dev/lcp/#what-elements-are-considered)おり、
今後の調査の進捗次第で`<svg>`, `<video>`などの要素が対象に追加される可能性があるとのこと。
そして、これらを初めから対象に含んでおかなかったのは、「始めはなるべくシンプルにしておきたかったから、意図的に除外した」とのこと。

また「最も大きい」の判断基準は、画面内のユーザに見えてる範囲内の大きさであり、画面外にはみ出たり、クリップされたり、インラインスクロールで見えない部分はサイズ判定の対象外となる。

画像要素では、もし表示上リサイズされていた場合、リサイズ前と後のサイズのうち**小さい方**のサイズが対象とされる。

テキスト要素では、テキストノードのサイズのみが考慮され、全てのテキストノードを内包する最小の矩形のサイズとなる。

そして全ての要素に共通する基準として、CSSによるいずれのmargin, padding, borderに起因するサイズは一切考慮されない。

## 他の読み込み時間系指標との比較
### `load`および`DOMContentLoaded`
> Older metrics like [load](https://developer.mozilla.org/ja/docs/Web/API/Window/load_event) or [DOMContentLoaded](https://developer.mozilla.org/ja/docs/Web/API/Window/DOMContentLoaded_event) are not good because they don't necessarily correspond to what the user sees on their screen. And newer, user-centric performance metrics like [First Contentful Paint (FCP)](https://web.dev/fcp/) only capture the very beginning of the loading experience. If a page shows a splash screen or displays a loading indicator, this moment is not very relevant to the user.

_[load](https://developer.mozilla.org/ja/docs/Web/API/Window/load_event)や[DOMContentLoaded](https://developer.mozilla.org/ja/docs/Web/API/Window/DOMContentLoaded_event)のような古い指標は好ましくなくて、というのもそれらはユーザが実際に画面上で体感するものとは必ずしも一致しないから。そして新たな、ユーザ中心のパフォーマンス指標である[First Contentful Paint (FCP)](https://web.dev/fcp/)はそのローディング体験の最初期のみを対象としている。もしページがスプラッシュスクリーンやローディングインジケーターを表示させている場合、この間はユーザにとってとても無価値な時間となる。_

### （かつてGoogleがオススメしていた）`First Meaningful Paint (FMP)`や`Speed Index (SI)`
> In the past we've recommended performance metrics like [First Meaningful Paint (FMP)](https://web.dev/first-meaningful-paint/) and [Speed Index (SI)](https://web.dev/speed-index/) (both available in Lighthouse) to help capture more of the loading experience after the initial paint, but these metrics are complex, hard to explain, and often wrong—meaning they still do not identify when the main content of the page has loaded.

_かつて我々（Google）はパフォーマンス指標として[First Meaningful Paint (FMP)](https://web.dev/first-meaningful-paint/)および[Speed Index (SI)](https://web.dev/speed-index/) (both available in Lighthouse)を推奨し、それが初期描画後の読み込み体験についてより多くを知る手助けになると考えていた。しかしこれらの指標は複雑で、説明し難く、またそれらはページのメインコンテンツのロード時間を示していないという点でしばしば意味上の齟齬があった。_

## 参照
- [Largest Contentful Paint (LCP) - web.dev](https://web.dev/lcp/)