Largest Contentful Paint (LCP) — это метрика, измеряющая время, необходимое для отображения самого большого элемента контента на странице. Понимание момента финализации LCP критично для оценки пользовательского восприятия скорости загрузки страницы и для оптимизации Core Web Vitals.
Финализация LCP происходит, когда браузер считает, что самый крупный видимый элемент страницы полностью загружен и визуально стабилен. Этот момент определяется несколькими ключевыми условиями:
Элемент визуально присутствует на экране LCP
учитывает только элементы, которые видимы пользователю в текущем
viewport. Скрытые элементы через display: none,
visibility: hidden или за пределами области просмотра не
влияют на расчет.
Ресурсы элемента загружены Для изображений и видео это означает полную загрузку медиа-файла. Для текстового блока — завершение рендеринга шрифтов, если они влияют на размер блока.
Элемент не изменялся длительное время Если контент продолжает меняться после первого отображения (например, из-за динамической подгрузки контента через JavaScript), LCP не фиксируется до тех пор, пока последнее изменение размера элемента не прошло более 500 мс.
Асинхронная загрузка ресурсов Отложенная
загрузка изображений через lazy-loading или использование
<img srcset> может задержать финализацию LCP. Важно
контролировать приоритет загрузки критичных элементов.
Web Fonts Использование нестандартных шрифтов
влияет на расчет LCP: пока шрифт не загрузился и текст не перестроился,
элемент считается изменяющимся. Рекомендуется применять
font-display: swap или предзагрузку шрифтов через
<link rel="preload">.
Изменения DOM Скрипты, которые динамически добавляют или модифицируют контент, могут “сдвинуть” LCP. Браузер ждет стабилизации визуального блока перед окончательным расчетом.
Анимации и переходы CSS-анимации, трансформации и переходы могут отсрочить фиксацию LCP до окончания визуальных изменений, если они влияют на размер или видимость элемента.
Библиотека Web Vitals предоставляет API для отслеживания LCP:
import { getLCP } from 'web-vitals';
getLCP((metric) => {
console.log('LCP value:', metric.value);
console.log('Относится к элементу:', metric.entries[0].element);
});
Особенности работы:
visibilitychange (пользователь покидает страницу), либо
после стабилизации элемента.metric.entries[0].element позволяет анализировать, какой
именно контент повлиял на LCP.width и height для картинок, избегать
внезапных изменений DOM.Эти действия позволяют фиксировать LCP быстрее и точнее, улучшая пользовательский опыт и соответствие Core Web Vitals.