Библиотека Web Vitals предоставляет набор инструментов для измерения ключевых метрик производительности веб-страниц. В JavaScript она реализована через экспорт различных функций и типов, которые позволяют отслеживать метрики, такие как LCP (Largest Contentful Paint), FID (First Input Delay), CLS (Cumulative Layout Shift) и дополнительные показатели, например TTFB (Time to First Byte).
Библиотека предоставляет несколько основных функций, каждая из которых предназначена для измерения конкретной метрики:
getLCP(callback: MetricCallback, opts?: MetricOptions)
Измеряет время до отображения самого крупного элемента контента на
странице.
callback — функция, вызываемая при завершении измерения
с объектом метрики.opts — опции для настройки поведения (например,
reportAllChanges для отслеживания нескольких изменений
LCP).Metric, содержащий ключевые
свойства: name, value, delta,
id.getFID(callback: MetricCallback, opts?: MetricOptions)
Отслеживает задержку первой интеракции пользователя с элементами
страницы.
value указывает задержку в
миллисекундах.Metric дополнительно включает
entries — массив событий типа
PerformanceEventTiming.getCLS(callback: MetricCallback, opts?: MetricOptions)
Вычисляет суммарный сдвиг макета страницы, влияющий на визуальную
стабильность.
value отображает суммарный коэффициент
сдвига.getTTFB(callback: MetricCallback)
Измеряет время от начала запроса страницы до получения первого байта от
сервера.
performance.timing.Metric включает entries с типом
PerformanceNavigationTiming.В Web Vitals используется строгая типизация объектов метрик:
Metric Основная структура,
передаваемая в колбэк каждой функции:
interface Metric {
name: string; // Название метрики (LCP, FID, CLS, TTFB)
value: number; // Значение метрики
delta: number; // Изменение значения с последнего вызова
id: string; // Уникальный идентификатор метрики
entries?: PerformanceEntry[]; // Опционально, массив событий Performance API
}MetricCallback Тип функции
обратного вызова:
type MetricCallback = (metric: Metric) => void;MetricOptions Настройки для функций
измерения:
interface MetricOptions {
duration?: number; // Продолжительность наблюдения метрики (в мс)
reportAllChanges?: boolean; // Если true, возвращает все изменения метрики
observer?: PerformanceObserver; // Пользовательский PerformanceObserver
}PerformanceEntry Интерфейс,
используемый для хранения информации о событиях производительности:
interface PerformanceEntry {
name: string;
entryType: string;
startTime: number;
duration: number;
[key: string]: any;
}WebVitalsMetricName Перечисление
возможных названий метрик:
type WebVitalsMetricName = 'LCP' | 'FID' | 'CLS' | 'TTFB' | 'FCP' | 'INP';Каждая функция возвращает объект Metric, который
содержит как базовые данные, так и детализированные события из
Performance API. Это позволяет:
id для связывания метрик с
конкретными элементами DOM или пользовательскими сессиями.entries доступны не для всех метрик:
например, CLS и LCP могут иметь массив событий, FID содержит события
первого ввода, TTFB использует данные сетевого запроса.delta помогает вычислять изменения
метрики при повторных измерениях на одной странице, что полезно при
динамическом контенте.MetricOptions.reportAllChanges
позволяет получать несколько вызовов обратного вызова для метрик,
которые могут изменяться в процессе работы страницы.Эта строгая типизация и четкое разделение функций делают библиотеку Web Vitals мощным инструментом для анализа производительности, позволяя создавать гибкие системы мониторинга и оптимизации веб-страниц.