Web Vitals предоставляет возможность измерять ключевые метрики пользовательского опыта, такие как Largest Contentful Paint (LCP), First Input Delay (FID) и Cumulative Layout Shift (CLS). Одним из продвинутых инструментов библиотеки является работа с buffered записями, позволяющая получать значения метрик, которые могли быть зафиксированы до того момента, когда скрипт был загружен.
Buffered записи основаны на использовании
PerformanceObserver с опцией
buffered: true. Это позволяет:
Пример базового подключения с использованием FID:
import { getFID } from 'web-vitals';
getFID((metric) => {
console.log(metric.name, metric.value);
}, { reportAllChanges: true });
Если событие произошло до загрузки скрипта, стандартный callback его не получит. Для решения этой проблемы используется buffered вариант:
import { onFID } from 'web-vitals';
onFID(console.log, { buffered: true });
Параметр buffered: true обеспечивает получение всех
ранее зафиксированных значений.
Buffered записи строятся поверх PerformanceObserver API. Основные моменты:
type) и
опцией buffered: true.entryList.getEntries()
или entryList.getEntriesByType().Пример:
const observer = new PerformanceObserver((list) => {
const entries = list.getEntries();
entries.forEach((entry) => {
if (entry.entryType === 'largest-contentful-paint') {
console.log('LCP:', entry.startTime);
}
});
});
observer.observe({ type: 'largest-contentful-paint', buffered: true });
Важное отличие buffered записей от обычных заключается в том, что они содержат всю историю записей с момента начала документа, а не только новые события, которые будут происходить после установки observer.
LCP это особенно важно, так как
этот показатель фиксируется в момент появления самого большого элемента
на экране.first-input
buffered вариант гарантирует, что задержка будет учтена даже при быстром
взаимодействии до полной загрузки библиотеки.Buffered записи особенно полезны при интеграции с аналитическими системами. Алгоритм работы:
buffered: true.Пример интеграции с сервером:
import { onCLS, onLCP, onFID } from 'web-vitals';
function sendToAnalytics(metric) {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify(metric),
keepalive: true,
headers: { 'Content-Type': 'application/json' }
});
}
onCLS(sendToAnalytics, { buffered: true });
onLCP(sendToAnalytics, { buffered: true });
onFID(sendToAnalytics, { buffered: true });
Использование keepalive: true гарантирует, что данные
будут отправлены даже при закрытии вкладки или переходе на другую
страницу.
if ('PerformanceObserver' in window) {
// Инициализация buffered observer
}
buffered: true.Использование buffered записей позволяет получить полный и точный набор метрик веб-производительности, что критично для анализа пользовательского опыта, оптимизации загрузки страниц и улучшения Core Web Vitals.