Библиотека Web Vitals предназначена для измерения
ключевых метрик производительности веб-страниц, таких как
Largest Contentful Paint (LCP), First Input
Delay (FID), Cumulative Layout Shift (CLS) и
другие. Одним из важных параметров, которые могут настраиваться при
вызове функций измерения, является reportAllChanges.
Понимание его назначения критично для корректного сбора и интерпретации
данных.
reportAllChangesПараметр reportAllChanges используется для управления
частотой уведомлений о изменениях метрики. По умолчанию функции Web
Vitals, такие как getCLS, getLCP или
getFID, отправляют только финальное
значение метрики, когда она стабилизируется. Если
reportAllChanges установлен в true, функция
будет вызывать переданную callback-функцию каждый раз, когда
значение метрики изменяется, а не только при финальном
результате.
Пример поведения по умолчанию:
import { getCLS } from 'web-vitals';
getCLS(console.log);
// Выводится только одно финальное значение CLS после завершения всех изменений макета.
Пример с reportAllChanges:
import { getCLS } from 'web-vitals';
getCLS(console.log, { reportAllChanges: true });
// Каждое изменение CLS будет отправлено в console.log
В этом случае в лог будут поступать все промежуточные значения CLS, фиксирующие каждое смещение контента.
reportAllChanges оправданоИспользование reportAllChanges: true особенно полезно в
случаях:
Тестирование пользовательского опыта в реальном времени Когда важно отследить, как контент загружается и смещается на странице, промежуточные значения метрик позволяют визуализировать динамику изменений.
Проверка нестабильных страниц или сложного DOM На страницах с множеством асинхронных компонентов или динамических элементов финальное значение метрики может не отражать истинную сложность пользовательского взаимодействия. Отслеживание всех изменений помогает выявить источники проблем.
Сбор подробной аналитики для A/B тестирования В случаях, когда тестируются разные версии интерфейса, важно знать не только итоговые показатели, но и все промежуточные значения метрик, чтобы определить, какая версия вызывает меньше визуальных смещений или задержек взаимодействия.
CLS (Cumulative Layout Shift) CLS по своей
природе изменяется по мере загрузки страницы. Если использовать
reportAllChanges: true, можно отследить каждое смещение
контента, а не только итоговое суммарное значение.
LCP (Largest Contentful Paint) LCP фиксирует
время отображения наибольшего видимого элемента. Параметр
reportAllChanges позволяет видеть, как меняется LCP при
динамической подгрузке изображений или контента.
FID (First Input Delay) Поскольку FID измеряет
задержку первого взаимодействия пользователя, использование
reportAllChanges имеет ограниченное применение. Обычно
достаточно финального значения, так как измеряется только первый
ввод.
Включение reportAllChanges увеличивает
количество вызовов callback, что может привести к
дополнительной нагрузке на скрипты аналитики. При этом важно
учитывать:
import { getCLS, getLCP, getFID } from 'web-vitals';
function sendToAnalytics(metric) {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify(metric),
keepalive: true
});
}
// Отправка всех изменений CLS и LCP, финальное значение FID
getCLS(sendToAnalytics, { reportAllChanges: true });
getLCP(sendToAnalytics, { reportAllChanges: true });
getFID(sendToAnalytics); // reportAllChanges не используется, достаточно финального значения
В данном примере каждое изменение CLS и LCP будет зафиксировано и отправлено в аналитику, а FID отправляется один раз — это соответствует логике метрики.
reportAllChanges контролирует, вызывается ли callback
для каждого изменения метрики или только для финального
значения.Использование reportAllChanges позволяет получить
гораздо более точное понимание поведения страницы и реакции пользователя
на визуальные изменения и задержки взаимодействия, что критично для
оптимизации пользовательского опыта.