Largest Contentful Paint (LCP) — это ключевой показатель Web Vitals, отражающий момент, когда основной контент страницы становится видимым пользователю. В отличие от традиционного времени загрузки страницы, LCP фокусируется на восприятии скорости отображения контента. Для полноценного анализа LCP необходимо не только фиксировать время его появления, но и понимать источник задержки: какие ресурсы, сетевые запросы или рендеринг блокировали отображение крупного элемента.
Библиотека Web Vitals предоставляет API для получения LCP напрямую из браузера:
import { getLCP } from 'web-vitals';
getLCP((metric) => {
console.log('LCP:', metric.value);
console.log('Элемент, вызвавший LCP:', metric.element);
});
Ключевые свойства объекта metric:
Эти данные позволяют не просто измерить LCP, но и анализировать его атрибуцию по источникам.
LCP часто зависит от нескольких этапов загрузки:
Сетевые задержки
Resource Timing API позволяет определить, сколько
времени заняло получение конкретного ресурса.<img> или
<video> важно учитывать время запроса и получения
ресурса, так как оно напрямую влияет на момент отображения.Критический рендеринг
JavaScript-операции
requestIdleCallback помогает снизить влияние JS на
LCP.Для глубокой атрибуции необходимо строить цепочку событий, которая привела к отображению элемента. Пример алгоритма:
Определение LCP-элемента через
metric.element.
Сбор PerformanceEntry через
performance.getEntriesByType('resource') и
performance.getEntriesByType('paint').
Фильтрация ресурсов, которые непосредственно связаны с LCP-элементом:
src или
background-image),Подсчет времени загрузки каждого ресурса и суммарной задержки.
Идентификация блокирующих факторов: сетевые задержки, критические CSS, JS-блоки.
Пример кода для атрибуции ресурсов LCP:
getLCP((metric) => {
const lcpElement = metric.element;
const resources = performance.getEntriesByType('resource');
const lcpResources = resources.filter(r => {
return r.name.includes(lcpElement.src || '');
});
lcpResources.forEach(r => {
console.log(`Ресурс: ${r.name}, fetchStart: ${r.fetchStart}, responseEnd: ${r.responseEnd}`);
});
});
Этот подход позволяет построить полную цепочку загрузки LCP, выявить узкие места и точно определить, какие ресурсы или операции стали причиной задержки.
Для долгосрочного мониторинга рекомендуется сохранять данные LCP и связанных ресурсов на сервере аналитики:
Такой сбор данных позволяет визуализировать цепочку загрузки, проводить A/B тестирование оптимизаций и оценивать влияние изменений инфраструктуры на реальное восприятие скорости страницы.
preload для ключевых ресурсов, влияющих на
LCP.Этот метод позволяет превращать LCP из абстрактного показателя в конкретные действия по улучшению пользовательского опыта, обеспечивая детальную прозрачность в цепочке загрузки страницы.