Разница между web-vitals и web-vitals/attribution

Библиотека 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

Практические рекомендации по выбору

  1. Для базового мониторинга производительности достаточно использовать основной модуль web-vitals. Он обеспечивает легкую интеграцию и быстрый сбор основных метрик без лишней информации.
  2. Для анализа влияния конкретных компонентов на производительность следует использовать web-vitals/attribution. Это особенно важно при оптимизации крупных SPA или динамически загружаемых страниц, где критично понять, какие элементы тормозят загрузку или вызывают сдвиги макета.
  3. Комбинация с аналитикой: результаты из web-vitals/attribution удобно передавать в инструменты веб-аналитики, чтобы визуализировать проблемные участки страницы и выявлять элементы, которые ухудшают пользовательский опыт.

Особенности реализации

  • Модуль web-vitals/attribution использует PerformanceObserver для отслеживания событий largest-contentful-paint, layout-shift и других.
  • Для точной атрибуции может потребоваться поддержка современных браузеров, так как старые версии не предоставляют все свойства PerformanceEntry.
  • Метрики с атрибуцией требуют дополнительных вычислений, что может слегка увеличить нагрузку на основной поток, поэтому важно использовать их выборочно на страницах с высокой динамикой контента.

Если требуется оптимизация скорости и точность анализа UX, понимание разницы между этими двумя модулями позволяет построить эффективную стратегию мониторинга Web Vitals, где базовые показатели собираются повсеместно, а подробная атрибуция применяется на критичных страницах или компонентах интерфейса.