В библиотеке Web Vitals поле largestShiftSource
используется для анализа Largest Contentful Paint (LCP)
и Cumulative Layout Shift (CLS) с точки зрения
элементов, вызывающих наибольшие смещения на странице. Оно предоставляет
подробную информацию о DOM-элементе, который стал источником
максимального сдвига в визуальной области, включая его геометрические
характеристики.
largestShiftSourceОбъект largestShiftSource содержит несколько ключевых
свойств:
node – ссылка на DOM-узел, который вызвал максимальный
сдвиг.previousRect – объект, описывающий предыдущие
координаты и размеры элемента до сдвига.currentRect – объект, описывающий текущие
координаты и размеры элемента после сдвига.value – числовое значение сдвига, показывающее величину
смещения элемента относительно его предыдущей позиции.previousRect и currentRectОба свойства имеют одинаковую структуру:
{
x: Number, // горизонтальная координата левого верхнего угла
y: Number, // вертикальная координата левого верхнего угла
width: Number, // ширина элемента в пикселях
height: Number // высота элемента в пикселях
}
x и y указывают абсолютное положение
элемента относительно viewport.width и height позволяют оценить масштаб
элемента и соотношение его размеров до и после сдвига.Используя эти данные, можно вычислить вектор сдвига элемента и его влияние на CLS.
function getShiftVector(previousRect, currentRect) {
const deltaX = currentRect.x - previousRect.x;
const deltaY = currentRect.y - previousRect.y;
return { deltaX, deltaY };
}
deltaX – горизонтальное смещение.deltaY – вертикальное смещение.Эти значения позволяют понять, в каком направлении элемент переместился и насколько сильно это повлияло на восприятие страницы пользователем.
Поле largestShiftSource является ключевым для анализа
Cumulative Layout Shift, так как:
previousRect и currentRect можно
визуализировать сдвиг и идентифицировать проблемные зоны верстки.value напрямую используется для расчета
CLS.Пример получения значения CLS через Web Vitals:
import { getCLS } from 'web-vitals';
getCLS((metric) => {
console.log('CLS:', metric.value);
console.log('Источник наибольшего сдвига:', metric.largestShiftSource);
});
node
позволяет определить, какой элемент нужно исправить в макете.value.largestShiftSource позволяет их отслеживать.largestShiftSource.Для наглядного анализа можно использовать overlay:
function highlightShift(node, previousRect, currentRect) {
const overlay = document.createElement('div');
overlay.style.position = 'absolute';
overlay.style.left = `${previousRect.x}px`;
overlay.style.top = `${previousRect.y}px`;
overlay.style.width = `${previousRect.width}px`;
overlay.style.height = `${previousRect.height}px`;
overlay.style.border = '2px solid red';
overlay.style.pointerEvents = 'none';
document.body.appendChild(overlay);
setTimeout(() => {
overlay.style.left = `${currentRect.x}px`;
overlay.style.top = `${currentRect.y}px`;
overlay.style.borderColor = 'green';
}, 1000);
}
Красная рамка показывает начальное положение, зеленая — конечное. Такой подход помогает визуально понять масштаб сдвига и скорректировать верстку.
previousRect и
currentRect для расчета точного влияния элемента на
CLS.largestShiftSource обеспечивает детальную геометрическую
информацию, позволяя не только измерять проблему, но и визуализировать и
устранять её.