inputDelay — это метрика, отражающая задержку отклика
пользовательского интерфейса на действия пользователя, такие как клики,
касания или нажатия клавиш. Она является частью набора Web Vitals,
направленного на измерение пользовательского опыта с точки зрения
интерактивности и отзывчивости веб-приложений. Основное назначение этой
метрики — выявлять ситуации, когда интерфейс кажется «тормозящим» или
несвоевременно реагирующим на действия пользователя.
inputDelay определяется как время между событием
пользовательского ввода (например, click,
keydown или touchstart) и моментом начала
обработки этого события браузером. В JavaScript это время можно
фиксировать с помощью API Event Timing или через
библиотеку Web Vitals:
import {getFID} from 'web-vitals';
getFID(metric => {
console.log('First Input Delay:', metric.value, 'ms');
});
В приведённом примере используется метод getFID, который
возвращает объект metric с ключевым полем
value — значением задержки в миллисекундах. Фокусировка на
первых взаимодействиях пользователя позволяет выявить критические
моменты, когда интерфейс кажется неотзывчивым.
inputDelayБлокирующий JavaScript
inputDelay.Web Workers, разбивка задач на
микрозадачи (setTimeout, requestIdleCallback)
или оптимизация тяжелого кода.Долгие рендер-процессы
inputDelay.documentFragment для массовых вставок, сокращение
количества наблюдателей (MutationObserver).Использование сторонних скриптов
async,
defer), динамическая подгрузка при необходимости.Анимации и переходы
transform и
opacity предпочтительнее, так как они обрабатываются GPU и
не блокируют поток.Плохая оптимизация событий
Для анализа inputDelay используют следующие подходы:
'first-input': обеспечивает прослушивание всех первых
взаимодействий на странице.Пример использования PerformanceObserver:
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log('Input delay:', entry.processingStart - entry.startTime, 'ms');
}
});
observer.observe({type: 'first-input', buffered: true});
Здесь entry.startTime — момент регистрации
пользовательского события, а entry.processingStart — момент
начала его обработки браузером.
Высокий inputDelay напрямую снижает ощущение
отзывчивости интерфейса. Пользователь может воспринимать сайт как
«тяжелый» или «тормозящий», что увеличивает вероятность ухода с
страницы. Метрика особенно критична для:
inputDelayrequestIdleCallback или setTimeout.Web Workers.