Библиотека Web Vitals предоставляет удобные средства
для измерения ключевых показателей пользовательского опыта на
веб-страницах, таких как LCP (Largest Contentful
Paint), CLS (Cumulative Layout Shift) и
FID (First Input Delay). Одной из важных возможностей
является определение конкретного DOM-элемента, который влияет на
показатели, что реализуется через свойство element в
объектах метрик.
elementСвойство element присутствует в объектах
LCPEntry и LayoutShiftEntry, которые
возвращаются при использовании соответствующих API Web Vitals. Его
основная цель — указать DOM-узел, который является
причиной задержки или смещения на странице.
element указывает на элемент,
который отображается последним и считается самым крупным видимым
контентом.element представляет собой
узел, который инициировал смещение, если смещение было вызвано
конкретным элементом.Свойство имеет тип Element | null, что
означает возможность отсутствия конкретного элемента, если невозможно
однозначно определить источник метрики.
element для LCPДля LCP запись создается через PerformanceObserver или через готовую
функцию getLCP() из Web Vitals. Объект LCPEntry содержит
несколько полезных свойств:
{
renderTime: 1234.56,
loadTime: 1250.78,
size: 34567,
element: HTMLElement,
url: "https://example.com/image.png"
}
Пример кода с выводом DOM-узла:
import { getLCP } from 'web-vitals';
getLCP((metric) => {
console.log('LCP значение:', metric.value);
if (metric.element) {
console.log('Виновный элемент:', metric.element.tagName, metric.element.id);
}
});
Ключевой момент: element позволяет напрямую
идентифицировать, какой элемент на странице замедляет рендеринг, что
полезно для оптимизации изображений, блоков текста и других видимых
элементов.
element для CLSCLS измеряет неожиданные смещения элементов. Когда
смещение происходит, Web Vitals формирует
LayoutShiftEntry. Свойство sources
содержит список элементов, которые участвовали в смещении. Для каждого
источника доступно поле node, эквивалентное
element.
import { getCLS } from 'web-vitals';
getCLS((metric) => {
metric.entries.forEach((entry) => {
entry.sources.forEach((source) => {
if (source.node) {
console.log('Элемент, вызвавший смещение:', source.node.tagName, source.node.id);
}
});
});
});
Такое использование позволяет точно локализовать проблемы с визуальной стабильностью, будь то динамическое добавление баннеров, рекламных блоков или всплывающих модальных окон.
elementnull.element
относится к видимому контенту страницы; невидимые или off-screen
элементы не учитываются.Использование свойства element критично для:
Пример автоматической оптимизации изображений с использованием
element:
getLCP((metric) => {
if (metric.element && metric.element.tagName === 'IMG') {
const img = metric.element;
img.loading = 'lazy';
console.log('Включена ленивя загрузка для LCP-изображения:', img.src);
}
});
Это позволяет сократить время LCP без ручного анализа всей страницы.
elementelement возвращает DOM-узел, ответственный за
задержку рендеринга или смещение.Использование element в сочетании с остальными метриками
Web Vitals делает мониторинг и оптимизацию производительности
тонким, точным и ориентированным на реальные проблемы
пользователей.