Отличия FID от INP

Web Vitals — это набор метрик, которые помогают оценивать качество пользовательского опыта на веб-странице. Среди них FID (First Input Delay) и INP (Interaction to Next Paint) являются ключевыми показателями интерактивности, однако между ними существуют принципиальные различия, влияющие на методологию измерений и интерпретацию результатов.


FID (First Input Delay)

Определение: FID измеряет задержку между первой пользовательской интеракцией с веб-страницей (например, клик, нажатие клавиши, тап на сенсорном экране) и моментом, когда браузер начинает обработку обработчика этого события.

Особенности метрики:

  • Фокус на первой интеракции. FID учитывает исключительно первый ввод, игнорируя все последующие действия пользователя. Это делает его полезным для оценки первоначальной отзывчивости страницы после загрузки.

  • Измеряется в миллисекундах (ms). Чем меньше FID, тем быстрее страница реагирует на пользовательский ввод. Рекомендуемые значения:

    • Отлично: < 100 ms
    • Средне: 100–300 ms
    • Плохо: > 300 ms
  • Зависимость от блокирующих скриптов. Любой JavaScript, выполняющийся в момент первой интеракции, напрямую увеличивает FID, так как браузер не может обработать событие, пока скрипт блокирует поток основного потока (main thread).

Пример ситуации, влияющей на FID: Пользователь пытается нажать кнопку на странице сразу после загрузки. Если в это время выполняется тяжелый скрипт, обработка клика задерживается на 200 ms, что отражается в FID.


INP (Interaction to Next Paint)

Определение: INP измеряет время отклика для всех интеракций пользователя на странице, а не только первую. Это более комплексная метрика, которая оценивает, насколько быстро страница обрабатывает действия пользователя в течение всего жизненного цикла сессии.

Особенности метрики:

  • Учитывает все интеракции. INP собирает данные по каждому клику, тапу и нажатии клавиши, а затем вычисляет «плохое» или «медленное» взаимодействие по наихудшему или 98-му процентилю задержки.

  • Показывает реальный пользовательский опыт. Даже если первая интеракция была быстрой, а последующие медленные, INP зафиксирует проблему, чего FID не делает.

  • Измеряется как время до следующей перерисовки (Next Paint). INP включает не только задержку в обработке события, но и время до визуальной реакции на экране.

  • Рекомендуемые значения:

    • Отлично: < 200 ms
    • Средне: 200–500 ms
    • Плохо: > 500 ms

Пример ситуации, влияющей на INP: Пользователь кликает на несколько кнопок в приложении. Некоторые клики обрабатываются быстро, другие — с задержкой из-за фоновых задач. INP фиксирует медленную интеракцию и отражает её в общей оценке страницы.


Сравнение FID и INP

Характеристика FID INP
Объект измерения Только первая интеракция Все интеракции на странице
Фокус метрики Задержка до начала обработки события Задержка до следующей визуальной реакции
Показывает реальный UX Частично, только начальная интерактивность Полностью, учитывает всю интерактивность
Зависимость от скриптов Высокая, блокирующие JS увеличивают FID Высокая, учитывает задержки всех интеракций
Статистический метод Медиана или отдельное событие 98-й перцентиль всех событий
Применимость Быстрая диагностика первичной отзывчивости Глубокий анализ реального поведения пользователя

Выводы по применению

  • FID полезен для оценки первичного времени отклика страницы и выявления проблем с тяжелыми скриптами на этапе загрузки.
  • INP обеспечивает более точное измерение общей отзывчивости и пользовательского опыта на протяжении всего взаимодействия с сайтом.
  • Современные рекомендации Google Web Vitals предполагают постепенный переход от FID к INP, поскольку INP отражает более полную картину интерактивности.

Практические аспекты в JavaScript

Для работы с этими метриками в браузере используется библиотека web-vitals:

import { getFID, getINP } from 'web-vitals';

// Отслеживание первой интеракции
getFID(metric => {
  console.log('FID:', metric.value, 'ms');
});

// Отслеживание всех интеракций
getINP(metric => {
  console.log('INP:', metric.value, 'ms');
});
  • getFID регистрирует только первый ввод пользователя.
  • getINP отслеживает все события и позволяет выявлять медленные интеракции на всей странице.

Дополнительно можно отправлять данные на аналитические платформы для постоянного мониторинга и оптимизации JavaScript, CSS и загрузки ресурсов.


Ключевые моменты

  • FID — фокус на первой интеракции; INP — на всех интеракциях.
  • INP более точно отражает реальный UX, особенно на динамических страницах и веб-приложениях.
  • Время обработки событий и рендеринга влияет на обе метрики, но INP учитывает визуальный отклик, а FID — только начало обработки.
  • Практическая реализация через библиотеку web-vitals позволяет гибко собирать и анализировать данные для оптимизации производительности.