Функция onINP является одной из ключевых точек
взаимодействия с метриками Web Vitals, предоставляя возможность
отслеживать показатель Interaction to Next Paint (INP)
— метрику, отражающую воспринимаемую пользователем отзывчивость
страницы. INP измеряет задержку между взаимодействием пользователя и
моментом, когда браузер завершает визуальное обновление страницы, что
делает её важным инструментом для оценки UX и производительности
интерфейса.
onINPonINP принимает один обязательный аргумент —
callback-функцию, которая вызывается при получении значения INP.
Синтаксис выглядит следующим образом:
import { onINP } from 'web-vitals';
onINP((metric) => {
console.log(metric.name, metric.value, metric.entries);
});
'INP'.PerformanceEventTiming, содержащий детализированные
сведения о событиях взаимодействия, включая тип события, время начала,
длительность и другие параметры.metricОбъект, передаваемый в callback, предоставляет структурированную информацию для анализа:
name: строка 'INP'.
value: число, среднее или максимальное значение
задержки взаимодействия. Значение выбирается в зависимости от стадии
загрузки страницы и количества взаимодействий.
delta: изменение метрики с момента предыдущего
измерения. Полезно для отслеживания динамики отзывчивости.
entries: массив объектов, каждый из которых
соответствует конкретному взаимодействию пользователя. Каждый элемент
содержит следующие поля:
entryType — тип записи ('event'), всегда
указывает на взаимодействие.name — имя события ('click',
'keydown', 'pointerdown' и т.д.).startTime — время начала события в миллисекундах с
момента загрузки страницы.duration — длительность обработки события в
миллисекундах.Инициализация до полной загрузки страницы
onINP можно вызывать сразу при инициализации скрипта, до
полной загрузки DOM. В этом случае метрика будет собирать данные с
момента загрузки, фиксируя все взаимодействия, начиная с ранней
стадии.
События взаимодействия INP учитывает не только клики и нажатия клавиш, но и сенсорные события на мобильных устройствах. Все события анализируются с точки зрения того, сколько времени потребовалось браузеру для полного визуального отклика.
Формирование итогового значения В течение жизни
страницы onINP может вызываться несколько раз по мере
поступления новых данных. Итоговое значение INP для страницы вычисляется
следующим образом:
Отправка данных на сервер или в аналитические
системы Callback-функция onINP может
использоваться для отправки данных о производительности на сервер, в
систему мониторинга или в аналитические платформы, например:
onINP((metric) => {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify(metric),
headers: { 'Content-Type': 'application/json' }
});
});
onINP лучше вызывать
один раз при инициализации приложения и использовать
кумулятивное обновление метрик.entries для последующего
анализа.entry.name внутри
callback.onINP((metric) => {
const slowInteractions = metric.entries.filter(e => e.duration > 200);
slowInteractions.forEach(e => {
console.warn(`Событие ${e.name} заняло ${e.duration}ms`);
});
});
В этом примере фиксируются только те события, которые превышают 200 мс, что позволяет выявлять проблемные элементы интерфейса.
Функция onINP предоставляет детализированный контроль
над измерением отзывчивости интерфейса и является основным инструментом
для анализа пользовательского опыта в контексте Web Vitals. Правильное
понимание структуры объекта метрики и особенностей её формирования
позволяет интегрировать INP в аналитические и мониторинговые системы,
выявлять узкие места производительности и оптимизировать интерфейсы для
высокой отзывчивости.