Библиотека Web Vitals предназначена для измерения ключевых
показателей производительности веб-страниц, которые напрямую влияют на
пользовательский опыт. Одним из удобных способов интеграции этих метрик
в современные React-приложения является использование встроенного хука
useReportWebVitals. Этот хук позволяет легко получать
показатели производительности и обрабатывать их в реальном времени
внутри компонентов React.
useReportWebVitals предоставляет доступ к четырем
основным метрикам:
Хук автоматически регистрирует события производительности и передает их в функцию-обработчик, что упрощает интеграцию в аналитику или системы мониторинга.
Для работы с хукoм необходимо:
import { useReportWebVitals } from 'web-vitals-react';
Простейший пример использования:
function App() {
useReportWebVitals((metric) => {
console.log('Метрика Web Vitals:', metric);
});
return (
<div>
<h1>Пример использования useReportWebVitals</h1>
</div>
);
}
Каждый объект metric содержит следующие свойства:
id — уникальный идентификатор события.name — имя метрики (LCP, FID,
CLS, INP).value — численное значение метрики, выраженное в
миллисекундах или долях.delta — изменение значения по сравнению с предыдущим
измерением.entries — массив PerformanceEntry, если метрика
позволяет получать подробные записи.Хук передает метрики в реальном времени, что позволяет интегрировать их с внешними аналитическими системами. Примеры практического использования:
Отправка в Google Analytics 4:
useReportWebVitals((metric) => {
gtag('event', metric.name, {
value: metric.value,
metric_id: metric.id,
});
});
Сбор пользовательских данных для внутренней аналитики:
useReportWebVitals((metric) => {
fetch('/api/performance', {
method: 'POST',
body: JSON.stringify(metric),
headers: { 'Content-Type': 'application/json' },
});
});
delta и value.useReportWebVitals((metric) => {
if (metric.value > 2500) {
console.warn('Проблемная метрика:', metric);
}
});
Хук позволяет передавать дополнительные параметры для настройки поведения:
useReportWebVitals(callback, {
reportAllChanges: true, // отправлять все изменения CLS, LCP
filter: (metric) => metric.name !== 'FID', // исключить метрику FID
});
reportAllChanges — если true, хук будет
уведомлять о каждом обновлении метрики, а не только о финальном
значении.filter — функция для выборочной фильтрации метрик перед
передачей их в обработчик.Для крупного приложения удобнее обрабатывать Web Vitals централизованно через Context:
const WebVitalsContext = React.createContext();
function WebVitalsProvider({ children }) {
const [metrics, setMetrics] = React.useState([]);
useReportWebVitals((metric) => {
setMetrics((prev) => [...prev, metric]);
});
return (
<WebVitalsContext.Provider value={metrics}>
{children}
</WebVitalsContext.Provider>
);
}
Компоненты внутри приложения могут подписываться на контекст и использовать накопленные метрики для аналитики, оптимизации или визуализации в реальном времени.
useReportWebVitals с библиотеками мониторинга
(Sentry, Datadog, New Relic) для получения полноценных отчетов по
производительности.Использование useReportWebVitals обеспечивает надежный
механизм отслеживания ключевых показателей веб-страницы, интеграцию с
аналитикой и возможность централизованной обработки метрик, что делает
его незаменимым инструментом при оптимизации пользовательского
опыта.