Библиотека Web Vitals предназначена для измерения
ключевых показателей производительности веб-страниц в реальном времени.
Она предоставляет набор функций для отслеживания метрик, таких как
LCP (Largest Contentful Paint), FID (First
Input Delay), CLS (Cumulative Layout Shift),
TTFB (Time to First Byte) и INP (Interaction to
Next Paint). Однако в экосистеме Web Vitals существуют два
основных способа использования: через основной пакет
web-vitals и через расширенный модуль
web-vitals/attribution. Понимание различий между ними
критично для корректного сбора данных и анализа производительности.
web-vitalsМодуль web-vitals предоставляет базовый API для
измерения метрик Web Vitals без дополнительной информации о
происхождении событий. Основные особенности:
Простота интеграции: достаточно подключить пакет
и вызвать функции, такие как getLCP, getFID,
getCLS.
Прямое измерение метрик: каждая функция
возвращает объект Metric с ключевыми свойствами:
name — название метрики (например,
"LCP"),value — числовое значение метрики в мс или долях,delta — разница с предыдущим значением метрики,id — уникальный идентификатор события.Фокус на пользовательских измерениях: данный модуль фиксирует метрики в контексте текущей сессии пользователя без указания элементов или событий, которые вызвали метрику.
Пример использования:
import { getLCP, getFID, getCLS } from 'web-vitals';
getLCP(metric => {
console.log(metric.name, metric.value);
});
getFID(metric => {
console.log(metric.name, metric.value);
});
getCLS(metric => {
console.log(metric.name, metric.value);
});
В этом подходе важен только результат метрики, без подробностей о том, какие конкретные элементы DOM или события страницы её вызвали.
web-vitals/attributionМодуль web-vitals/attribution добавляет
детализированное измерение происхождения метрик. Это
позволяет понять, какие элементы или события страницы являются причиной
конкретной метрики. Основные возможности:
Атрибуция к элементам DOM: например, можно
определить, какой элемент вызвал задержку CLS или на какой
элемент пришлось основное отображение LCP.
Подробные объекты метрик: расширенный объект
Metric включает дополнительные свойства:
entries — массив записей PerformanceEntry, которые
непосредственно связаны с метрикой,attribution — информация о DOM-элементе, инициировавшем
событие, включая его селектор, ID и позицию на странице.Аналитика в реальном времени: позволяет не только фиксировать метрики, но и связывать их с конкретными компонентами страницы или пользовательскими действиями.
Пример использования:
import { getLCP, getCLS } from 'web-vitals/attribution';
getLCP(metric => {
console.log(metric.name, metric.value, metric.attribution);
});
getCLS(metric => {
console.log(metric.name, metric.value, metric.entries);
});
Здесь важно отметить, что metric.attribution может
содержать массив объектов с детальной информацией о каждом элементе,
который способствовал возникновению метрики.
| Параметр | web-vitals |
web-vitals/attribution |
|---|---|---|
| Фокус | Значение метрики | Значение + источник/атрибуция |
| Данные о DOM | Нет | Да |
| Подходит для | Быстрого измерения | Глубокого анализа и оптимизации |
| Дополнительные свойства | name, value, delta,
id |
entries, attribution |
| Сложность интеграции | Простая | Более сложная, требуется понимание DOM |
web-vitals. Он
обеспечивает легкую интеграцию и быстрый сбор основных метрик без лишней
информации.web-vitals/attribution. Это особенно важно при оптимизации
крупных SPA или динамически загружаемых страниц, где критично понять,
какие элементы тормозят загрузку или вызывают сдвиги макета.web-vitals/attribution удобно передавать в инструменты
веб-аналитики, чтобы визуализировать проблемные участки страницы и
выявлять элементы, которые ухудшают пользовательский опыт.web-vitals/attribution использует
PerformanceObserver для отслеживания событий
largest-contentful-paint, layout-shift и
других.Если требуется оптимизация скорости и точность анализа UX, понимание разницы между этими двумя модулями позволяет построить эффективную стратегию мониторинга Web Vitals, где базовые показатели собираются повсеместно, а подробная атрибуция применяется на критичных страницах или компонентах интерфейса.