Сессионное окно — это ключевой концепт в измерении показателей веб-производительности, особенно в контексте метрики Cumulative Layout Shift (CLS). CLS фиксирует визуальные сдвиги элементов страницы, происходящие после её первоначальной загрузки. Для того чтобы измерение было корректным, необходимо определить временные рамки, в которых события сдвига элементов суммируются, чтобы избежать завышенных или искажённых результатов.
Сессионное окно создаётся вокруг группы смещений, происходящих близко друг к другу по времени. Основные правила формирования окна:
Таким образом, алгоритм формирует независимые кластеры смещений, которые затем суммируются для расчёта CLS.
Накопление сдвигов строится по принципу суммирования индивидуальных вкладов с учётом видимости элементов и их взаимодействия с viewport:
[ = ]
[ = (_i)]
Учет видимости: Элемент учитывается только в том случае, если он видим пользователю, что предотвращает включение смещений, происходящих вне экрана.
Финальный CLS: После завершения всех окон выбирается максимальный CLS среди окон, который и является метрикой для страницы:
[ _{final} = (_1, _2, )]
Библиотека Web Vitals предоставляет API для
автоматического измерения CLS и других метрик. Основной подход
реализуется через PerformanceObserver, отслеживающий
layout-shift:
import {getCLS} from 'web-vitals';
getCLS(metric => {
console.log(metric.value); // Итоговое значение CLS
console.log(metric.entries); // Массив отдельных сдвигов
});
metric.entries содержит объекты типа
LayoutShift, каждый с временной отметкой
(startTime) и смещением элементов
(value).hadRecentInput), чтобы исключить смещения, вызванные
взаимодействиями.Сессионное окно и алгоритм накопления сдвигов позволяют адекватно отражать реальное восприятие страницы пользователем, превращая массив разрозненных сдвигов в осмысленную и измеримую метрику. Это делает CLS одним из самых надёжных показателей визуальной стабильности интерфейса.