FCP

Материал из Энциклопедия интернет-маркетинга MarketWiki

FCP (First Contentful Paint) - это метрика производительности веб-страниц, которая измеряет время от начала загрузки страницы до момента, когда в области просмотра появляется первый текстовый или графический элемент контента. FCP показывает пользователю, что страница начала загружаться и что-то уже происходит.

FCP является одной из базовых метрик скорости загрузки и входит в набор метрик, используемых инструментами Lighthouse и PageSpeed Insights. Хороший FCP создаёт у пользователя впечатление быстрого сайта, даже если полная загрузка ещё не завершена. Плохой FCP заставляет пользователя смотреть на пустой экран и сомневаться, работает ли сайт вообще.

Что такое First Contentful Paint

[править]

First Contentful Paint фиксирует момент, когда браузер впервые отрисовывает любой контент, полученный из DOM. Этим контентом может быть:

  • текст (заголовки, абзацы, списки);
  • изображения (включая фоновые);
  • canvas-элементы;
  • SVG-графика.

Важно понимать, что FCP не учитывает загрузку всего контента страницы - только первый его элемент. Это может быть, например, заголовок страницы, который появился, а всё остальное ещё грузится. FCP также не учитывает, стал ли контент интерактивным - только визуальное появление.

FCP отличается от FMP (First Meaningful Paint), который пытается оценить появление основного, значимого контента. FCP проще и объективнее, поэтому именно он используется в современных инструментах анализа.

Зачем нужен FCP

[править]

FCP отвечает на важный психологический вопрос: когда пользователь видит, что сайт работает. Это критически важно для:

  • **Первого впечатления:** пользователь не должен смотреть на пустой экран дольше доли секунды.
  • **Удержания внимания:** если ничего не происходит, пользователь может закрыть вкладку.
  • **Восприятия скорости:** быстрый FCP создаёт ощущение быстрого сайта, даже если остальное грузится дольше.
  • **Мобильных устройств:** на медленных соединениях быстрый FCP особенно важен.

Исследования показывают, что задержка даже в 1 секунду может снижать конверсию и увеличивать показатель отказов.

Как измеряется FCP

[править]

FCP измеряется браузером автоматически. Момент фиксации FCP наступает, когда:

  1. Браузер начинает загрузку страницы.
  2. Происходит первая отрисовка любого контента из DOM.
  3. Браузер фиксирует время этого события.

Для получения данных FCP можно использовать:

  • **Встроенные инструменты браузера:** Chrome DevTools, Performance panel.
  • **API браузера:** Paint Timing API позволяет программно получать значение FCP.
  • **Библиотеки:** web-vitals от Google для сбора метрик на реальных пользователях.
  • **Инструменты аналитики:** Google Analytics 4, Яндекс Метрика могут отслеживать FCP.
  • **Специализированные сервисы:** Lighthouse, PageSpeed Insights, WebPageTest.

В лабораторных тестах FCP измеряется в контролируемых условиях, а в полевых - на реальных пользователях (Chrome User Experience Report).

Хорошие и плохие значения FCP

[править]

Google установил чёткие пороговые значения для FCP на основе исследований пользовательского опыта:

  • **Хороший FCP:** менее 1,8 секунды.
  • **Требует улучшения:** от 1,8 до 3 секунд.
  • **Плохой FCP:** более 3 секунд.

Эти значения используются в инструментах Google и в отчётах Core Web Vitals (хотя сам FCP не входит в Core Web Vitals, а является вспомогательной метрикой).

Важно понимать, что эти значения применимы как к десктопным, так и к мобильным устройствам, хотя на мобильных добиться быстрого FCP сложнее.

Что влияет на FCP

[править]

На время появления первого контента влияет множество факторов.

Время ответа сервера (TTFB)

[править]

Если сервер долго отвечает, браузер не может начать отрисовку. Оптимизация TTFB - первый шаг к улучшению FCP.

Блокирующий CSS

[править]

Браузер не отрисовывает страницу, пока не загрузит и не обработает весь CSS из секции head. Большие CSS-файлы или медленная их загрузка задерживают FCP.

Блокирующий JavaScript

[править]

Скрипты, загружаемые без атрибутов async или defer, блокируют парсинг HTML и отрисовку контента. Чем больше блокирующих скриптов, тем хуже FCP.

Загрузка шрифтов

[править]

Если текст скрыт до загрузки шрифта (FOIT - Flash of Invisible Text), это может задерживать FCP. Использование font-display: swap позволяет показывать текст сразу системным шрифтом.

Редиректы

[править]

Каждый редирект добавляет дополнительное время до начала загрузки страницы.

Медленное соединение

[править]

На медленных сетях любой контент загружается дольше, что напрямую влияет на FCP.

Размер HTML

[править]

Огромный HTML-файл дольше загружается и парсится, что откладывает момент первой отрисовки.

Как улучшить FCP

[править]

Оптимизация FCP требует работы на нескольких уровнях.

Оптимизация сервера

[править]
  • быстрый хостинг и настройка сервера;
  • использование CDN для географически распределённой доставки;
  • настройка кэширования;
  • минимизация TTFB.

Критический CSS

[править]

Выделите стили, необходимые для отображения первого экрана, и встройте их прямо в HTML (inline). Остальной CSS загружайте асинхронно или отложенно.

Оптимизация загрузки скриптов

[править]
  • используйте async или defer для некритичных скриптов;
  • встраивайте критический JavaScript в HTML;
  • удаляйте неиспользуемый код;
  • минифицируйте и сжимайте скрипты.

Оптимизация шрифтов

[править]
  • используйте font-display: swap;
  • предзагружайте критические шрифты с помощью preload;
  • используйте современные форматы (woff2);
  • минимизируйте количество шрифтов и их вариаций.

Предзагрузка важных ресурсов

[править]

Используйте `<link rel=preload>` для ключевых ресурсов (изображения, шрифты, скрипты, стили), которые нужны для первого экрана.

Устранение редиректов

[править]

Уберите цепочки редиректов, особенно перед загрузкой страницы.

Минификация HTML

[править]

Уменьшите размер HTML-кода, удалив комментарии, лишние пробелы и неиспользуемый код.

Оптимизация изображений

[править]

Хотя изображения не всегда влияют на FCP, если они находятся в первом экране, их загрузка может задерживать отрисовку. Используйте современные форматы и сжатие.

FCP в инструментах

[править]

FCP доступен во всех основных инструментах анализа производительности.

Lighthouse

[править]

В Lighthouse FCP отображается в разделе метрик производительности. Инструмент также даёт рекомендации по улучшению FCP, связанные с оптимизацией CSS, JavaScript и сервера.

PageSpeed Insights

[править]

PageSpeed Insights показывает FCP как в лабораторных данных (от Lighthouse), так и в полевых данных из Chrome User Experience Report (если они доступны). Это позволяет сравнивать результаты тестов с реальным пользовательским опытом.

Google Search Console

[править]

В отчёте Core Web Vitals можно увидеть, какие страницы имеют проблемы с FCP, хотя сам FCP не входит в Core Web Vitals. Это полезно для диагностики.

Chrome DevTools

[править]

В инструментах разработчика Chrome можно проанализировать все этапы загрузки и понять, что именно задерживает FCP. Performance panel показывает временную шкалу с отметкой FCP.

WebPageTest

[править]

WebPageTest предоставляет детальную информацию о FCP, включая видео загрузки и анализ каждого ресурса.

Библиотека web-vitals

[править]

Библиотека web-vitals от Google позволяет собирать данные о FCP от реальных пользователей и отправлять их в системы аналитики.

FCP и Core Web Vitals

[править]

FCP не входит в тройку метрик Core Web Vitals (LCP, INP, CLS), но остаётся важной вспомогательной метрикой. Core Web Vitals фокусируются на более значимых аспектах пользовательского опыта:

  • LCP - когда загрузился основной контент;
  • INP - насколько страница отзывчива;
  • CLS - насколько стабильно отображается контент.

Однако плохой FCP часто сигнализирует о проблемах, которые могут влиять и на Core Web Vitals. Например, медленный сервер или блокирующий CSS ухудшают не только FCP, но и LCP.

Типичные ошибки, ухудшающие FCP

[править]
  • Отсутствие оптимизации критического CSS: весь CSS загружается одним файлом, блокируя отрисовку.
  • Блокирующие скрипты в head: JavaScript загружается и выполняется до начала отрисовки.
  • Медленный сервер: большой TTFB задерживает начало загрузки.
  • Тяжёлые шрифты: текст не виден до загрузки шрифтов (FOIT).
  • Большой HTML: слишком много кода в начальном ответе сервера.
  • Редиректы: потеря времени на дополнительные запросы.
  • Нет кэширования: каждый пользователь грузит всё заново.

FCP и пользовательский опыт

[править]

Пользователи оценивают скорость сайта субъективно, и FCP сильно влияет на это восприятие. Даже если весь сайт загружается за 3 секунды, но первый контент появляется через 0,5 секунды, пользователь будет считать сайт быстрым. И наоборот, если сайт загружается те же 3 секунды, но всё это время экран остаётся пустым, пользователь будет раздражён.

Поэтому оптимизация FCP часто даёт больший психологический эффект, чем оптимизация других метрик, даже если технически сайт не становится быстрее.

Связанные термины

[править]