Объект CLSMetric используется в библиотеке Web Vitals
для представления метрики Cumulative Layout Shift
(CLS), которая измеряет визуальную стабильность страницы. CLS
фиксирует неожиданные смещения элементов в процессе загрузки и
взаимодействия с пользователем, что критично для оценки качества
пользовательского опыта.
CLSMetric является специализированным объектом метрики,
наследующим базовые свойства из общей структуры Metric, но
включает дополнительные детали, специфичные для CLS. Рассмотрим ключевые
поля:
name (string) Название метрики. Для
CLS это всегда "CLS". Используется для идентификации
метрики в логах, аналитике и колбэках.
console.log(metric.name); // "CLS"value (number) Численное значение
CLS на данный момент. Значение представляет собой суммарный коэффициент
смещения элементов страницы, вычисляемый по алгоритму:
[ CLS = ( )]
где impact fraction — доля области видимой страницы,
затронутая смещением, а distance fraction — нормализованное
расстояние смещения относительно размера экрана.
if (metric.value > 0.1) {
console.warn("CLS выше рекомендуемого порога");
}delta (number) Отражает
разницу в значении CLS между текущим измерением и
предыдущим событием. Полезно для наблюдения за динамикой смещений на
странице, особенно при ленивой загрузке контента или динамическом
рендеринге.
console.log(metric.delta); // изменение CLS с момента предыдущего событияid (string) Уникальный
идентификатор метрики. Формат обычно включает тип метрики и уникальную
последовательность, что позволяет различать события при многократных
измерениях на одной странице.
console.log(metric.id); // "v1-CLS-1234567890"entries (LayoutShift[]) Массив
объектов LayoutShift, представляющий все отдельные
смещения, которые влияют на текущее значение CLS. Каждый элемент массива
содержит детальную информацию о конкретном смещении:
number) — величина отдельного
смещения.ShiftSource[]) — массив
элементов DOM, участвующих в смещении.boolean) — указывает,
произошло ли смещение вследствие взаимодействия пользователя (например,
клик или скролл), что обычно не учитывается в CLS.Пример структуры entries:
metric.entries.forEach(entry => {
console.log(entry.value, entry.sources, entry.hadRecentInput);
});value
всегда суммирует только те смещения, которые произошли без недавнего
пользовательского взаимодействия
(hadRecentInput === false). Это гарантирует, что метрика
отражает только неожиданные смещения.delta позволяет отслеживать прогрессию CLS в реальном
времени.import { getCLS } from 'web-vitals';
getCLS((metric) => {
console.log('CLS value:', metric.value);
console.log('CLS delta:', metric.delta);
console.log('CLS entries count:', metric.entries.length);
});
В данном примере объект metric имеет все описанные выше
поля и позволяет детально анализировать смещения элементов страницы.
| Поле | Тип | Описание |
|---|---|---|
name |
string |
Название метрики (“CLS”) |
value |
number |
Текущее суммарное значение CLS |
delta |
number |
Изменение CLS с предыдущего события |
id |
string |
Уникальный идентификатор события |
entries |
LayoutShift[] |
Массив отдельных смещений с деталями |
Эта структура обеспечивает полное представление о визуальной стабильности страницы и позволяет интегрировать измерения CLS в систему мониторинга производительности и пользовательского опыта.