First Contentful Paint (FCP) и Largest Contentful Paint (LCP) — это два ключевых показателя производительности страницы, которые измеряют восприятие скорости загрузки пользователем. Несмотря на то, что оба метрики оценивают визуальное отображение контента, между ними существуют фундаментальные различия и взаимосвязь, которые оказывают прямое влияние на оптимизацию пользовательского опыта.
FCP фиксирует момент, когда браузер впервые отрисовывает любой DOM-элемент, содержащий текст, изображение, SVG или блок с фоновой картинкой. Основные характеристики FCP:
FCP не измеряет полное отображение основной части контента, а лишь момент появления первого видимого элемента. Именно поэтому FCP можно рассматривать как раннюю метрику, сигнализирующую о прогрессе загрузки страницы.
LCP измеряет время от начала загрузки страницы до момента, когда отображается самый крупный визуальный элемент на экране, который пользователь видит без прокрутки. Это может быть крупное изображение, блок текста или видео. Основные характеристики LCP:
LCP не учитывает мелкие элементы или ранние визуальные эффекты, поэтому метрика является более точным индикатором восприятия производительности для реальных пользователей.
Хотя FCP и LCP измеряют разные моменты загрузки, их поведение часто коррелирует. Основные закономерности:
FCP предшествует LCP. FCP всегда фиксируется раньше, так как браузер сначала отображает любой контент, а LCP — только самый крупный элемент. Если FCP происходит поздно, LCP, как правило, тоже будет задержан.
Скорость FCP влияет на восприятие LCP. Медленный FCP создает ощущение «замерзшей» страницы, даже если LCP появляется быстро. Оптимизация ранней отрисовки DOM-элементов способствует более плавной и быстрой визуализации основного контента.
Оптимизация LCP может частично улучшить FCP. Если крупные элементы, которые формируют LCP, загружаются и отображаются быстрее (например, через lazy loading или оптимизацию изображений), это может уменьшить задержку визуальной обратной связи, затрагивая косвенно и FCP.
Влияние критического рендер-блока. CSS и JavaScript, блокирующие рендеринг, увеличивают оба показателя. FCP задерживается, пока браузер не обработает критические стили, а LCP — пока не загрузятся крупные ресурсы.
Web Vitals предоставляет API для отслеживания FCP и LCP через
web-vitals библиотеку:
import { getFCP, getLCP } from 'web-vitals';
getFCP(metric => {
console.log('FCP:', metric.value);
});
getLCP(metric => {
console.log('LCP:', metric.value);
});
Особенности использования:
metric.value возвращает значение в миллисекундах.Для улучшения FCP:
preload для основных шрифтов и
изображений.Для улучшения LCP:
Синергия оптимизации: Улучшение FCP создает ранний визуальный отклик, а ускорение LCP делает восприятие страницы завершенным. Вместе эти метрики дают комплексную картину производительности и пользовательского опыта.
Графически FCP можно представить как точку старта на временной шкале загрузки, а LCP — как конечную цель, когда основной контент полностью виден. Понимание этой зависимости помогает выявлять узкие места и приоритизировать оптимизацию критических ресурсов.
FCP и LCP работают как два этапа одного процесса: первый сигнализирует о том, что страница начала отрисовываться, второй — что страница готова для взаимодействия с пользователем. Балансировка этих метрик обеспечивает быстрое ощущение отклика и полноценное отображение ключевого контента.