Cumulative Layout Shift (CLS) измеряет суммарную нестабильность визуальных элементов страницы. Любое смещение контента, происходящее после первоначальной загрузки, увеличивает значение CLS. Высокий CLS указывает на плохую пользовательскую практику: внезапные смещения кнопок, картинок или текста нарушают взаимодействие и воспринимаются как «дергание» интерфейса.
CLS вычисляется как произведение Impact Fraction (доля видимой области, затронутой смещением) и Distance Fraction (доля смещения относительно видимой области). Итоговое значение складывается для всех изменений на странице, что делает метрику чувствительной к множественным мелким смещениям.
1. Панель Performance
DevTools позволяет фиксировать и анализировать смещения с помощью вкладки Performance:
Открыть DevTools → Performance → Record.
Взаимодействовать с страницей, особенно в сценариях, где часто появляются динамические элементы.
После записи откроется график, где смещения отображаются отдельными событиями Layout Shift. Важные параметры:
value – величина смещения (в CLS баллах);sources – элементы, которые вызвали смещение;hadRecentInput – указывает, произошло ли смещение без
действия пользователя (важно для Web Vitals).Нажав на событие Layout Shift, DevTools подсвечивает элементы DOM, вызвавшие смещение, позволяя определить проблемные блоки и их причины.
2. Панель Web Vitals
Chrome DevTools предоставляет отдельное расширение или встроенную панель для отображения Web Vitals в реальном времени. CLS отображается как сумма всех изменений макета за сессию. Важное преимущество — можно наблюдать динамические изменения при прокрутке, lazy-loading картинок и добавлении рекламных блоков.
PerformanceObserver позволяет отслеживать события CLS программно:
import {getCLS} from 'web-vitals';
getCLS(metric => {
console.log('CLS value:', metric.value);
console.log('Sources:', metric.entries);
});
Разбор полей:
metric.value — финальное значение CLS.
metric.entries — массив объектов
LayoutShift, включающих:
sources — элементы DOM, вызвавшие смещение;value — доля смещения для конкретного LayoutShift;hadRecentInput — true, если смещение связано с
пользовательским действием.Использование этого подхода помогает собирать данные CLS в реальном времени, отправлять их на аналитические серверы и связывать с конкретными сценариями взаимодействия.
1. Layer Borders
В DevTools вкладка Rendering → Layout Shift Regions позволяет включить визуальное отображение смещений. Красные рамки показывают элементы, которые изменили своё положение. Это особенно полезно при сложных анимациях и динамическом контенте.
2. Lighthouse
Lighthouse автоматически проверяет CLS при аудите страницы. Отчёт показывает:
Наиболее эффективная отладка CLS достигается сочетанием:
Использование всех трёх подходов позволяет не только фиксировать проблему, но и анализировать динамические сценарии, такие как вставка рекламы, подгрузка контента по скроллу и изменения DOM после пользовательского взаимодействия.