First Input Delay (FID) — это метрика Web Vitals, предназначенная для измерения времени, которое проходит с момента первого взаимодействия пользователя с веб-страницей до момента, когда браузер способен полностью обработать это событие. В отличие от других метрик, таких как Largest Contentful Paint (LCP) или Cumulative Layout Shift (CLS), FID оценивает именно интерактивность, а не визуальное отображение или стабильность контента.
FID фокусируется исключительно на первом взаимодействии пользователя с элементами страницы, такими как клики, нажатия на кнопки или ссылки, а также на ввод текста. Под «первым взаимодействием» подразумевается первый пользовательский жест после загрузки страницы, который инициирует обработку события в браузере.
Ограничение метрики именно первым взаимодействием связано с тем, что:
Первая реакция страницы наиболее критична Исследования показали, что именно первый отклик страницы формирует у пользователя ощущение её отзывчивости. Если страница долго не реагирует на первый клик, пользователь получает впечатление «тяжелой» или «неотзывчивой» страницы, даже если последующие взаимодействия происходят без задержек.
Техническая сложность измерения всех взаимодействий После первого взаимодействия страница может быть активно модифицирована JavaScript-кодом, что делает последующие события слишком вариативными и сложными для стандартизованной метрики. Например, динамическое подгружение скриптов, открытие модальных окон или асинхронные операции сильно влияют на задержку обработки событий. Чтобы избежать хаотичных и непредсказуемых данных, измерение ограничено первым взаимодействием.
Согласованность с пользовательским опытом FID рассчитан на то, чтобы дать однозначную, воспроизводимую метрику UX, которая напрямую коррелирует с ощущением отзывчивости. Сосредоточение на первом взаимодействии позволяет получать четкую и сравнимую цифру между различными страницами и сайтами.
При регистрации FID происходит следующее:
Прослушивание событий ввода С помощью API
EventListener фиксируются события click,
keydown, mousedown, touchstart и
другие, относящиеся к взаимодействию пользователя.
Измерение задержки обработки события Когда
событие инициировано, Web Vitals вычисляет разницу между временем
наступления события (event.timeStamp) и моментом, когда
браузер начинает фактическую обработку обработчика события.
import {getFID} from 'web-vitals';
getFID((metric) => {
console.log('FID:', metric.value);
console.log('Первое взаимодействие:', metric.entries[0]);
});
Здесь metric.value — это задержка в миллисекундах, а
metric.entries содержит подробные сведения о событии,
включая тип взаимодействия и целевой элемент.
Регистрация только первого события После того как первое взаимодействие измерено и зафиксировано, последующие события не учитываются. Это исключает возможность искажения метрики из-за сложной асинхронной логики страницы или нагрузки на основной поток.
Не измеряет долгие взаимодействия Если пользователь начал ввод после первого взаимодействия и последующие действия обрабатываются медленно, FID не даст полной картины задержек. Для этого существуют дополнительные метрики, такие как Total Blocking Time (TBT).
Зависимость от главного потока FID фиксирует только задержку, вызванную блокировкой основного потока браузера. Скрипты, выполняющиеся асинхронно или в Web Worker, не влияют на FID.
Срабатывает только на интерактивных страницах Если страница статична и не содержит интерактивных элементов на момент загрузки, FID не фиксируется.
Фокусировка FID на первом взаимодействии позволяет:
Фактически, FID является индикатором готовности страницы к первому реальному взаимодействию, что делает её ключевым инструментом для оптимизации интерактивности и повышения удовлетворённости пользователя.