Библиотека Web Vitals в JavaScript предоставляет
возможность измерять ключевые показатели производительности страниц,
такие как LCP, FID, CLS и другие. Одним из важных аспектов анализа
взаимодействия пользователя с интерфейсом является отслеживание
времени обработки событий, которое отражается в поле
processingDuration.
processingDurationПоле processingDuration появляется в метриках
First Input Delay (FID) и Interaction to Next
Paint (INP). Оно измеряет время, затраченное браузером
на выполнение обработчика события после первого взаимодействия
пользователя, до момента, когда поток снова становится доступен
для обновления интерфейса.
processingDuration — это часть FID, отражающая, сколько
миллисекунд занял ваш JavaScript на выполнение обработчика.Пример структуры события FID с использованием Web Vitals:
import { getFID } from 'web-vitals';
getFID((metric) => {
console.log('FID:', metric.value);
console.log('Processing duration:', metric.entries[0].processingDuration);
});
Здесь metric.entries[0].processingDuration указывает,
сколько миллисекунд браузер был занят обработкой пользовательского
события.
Долгие обработчики JavaScript могут существенно ухудшить реактивность интерфейса. Даже если страница визуально загружается быстро, пользователи замечают задержку при попытке взаимодействия.
Ключевые последствия долгих обработчиков:
processingDurationИспользование Web Vitals API Метрика FID уже
автоматически содержит processingDuration в своих
entry:
import { getFID } from 'web-vitals';
getFID((metric) => {
metric.entries.forEach(entry => {
console.log('Start time:', entry.startTime);
console.log('Processing duration:', entry.processingDuration);
});
});Разделение событий на короткие задачи Если
обработчик превышает 50 мс, следует разбить его на более мелкие части с
помощью setTimeout, requestAnimationFrame или
requestIdleCallback.
Профилирование долгих задач Инструменты DevTools
позволяют выявлять «долгие задачи» (Long Tasks), которые блокируют
основной поток. Они соответствуют высоким значениям
processingDuration.
Оптимизация обработчиков событий
processingDurationsetTimeout(fn, 0) или queueMicrotask)
помогает избежать блокировки основного потока.{ passive: true }) для скролла и touch-событий, чтобы не
блокировать интерфейс.Собранные значения processingDuration позволяют строить
гистограммы и отчеты по доле долгих обработчиков.
Например, можно определить, какой процент событий превышает 50 мс и
влияет на FID. Это помогает приоритизировать оптимизацию именно тех
функций, которые реально тормозят пользовательский опыт.
processingDuration измеряется только для
первого ввода пользователя (FID) и для всех
интерактивных событий, если используется INP.entry, поэтому нужно проверять массив
entries для полной картины.Хотите, я могу подготовить подробную схему с визуализацией
потока FID и обработки событий, чтобы было наглядно видно, как
processingDuration вписывается в жизненный цикл
взаимодействия пользователя?