Библиотека Web Vitals позволяет измерять ключевые показатели производительности пользовательского опыта на веб-странице, включая LCP (Largest Contentful Paint), FID (First Input Delay), CLS (Cumulative Layout Shift) и другие метрики. Основная цель — точная диагностика узких мест, влияющих на скорость загрузки, интерактивность и визуальную стабильность.
Для работы с библиотекой достаточно подключить пакет через npm или CDN:
import {getLCP, getFID, getCLS} from 'web-vitals';
Метрики измеряются на уровне страницы, что означает, что каждая метрика относится к конкретному URL. Однако для сложных сайтов с повторяющимися шаблонами страниц, динамическими зонами и пользовательскими сегментами данных необходимо применять подход сегментации по странице и шаблону.
Сегментация по странице позволяет разделить измерения по конкретным URL, включая динамически сгенерированные. Для этого важно корректно определять идентификатор страницы, который будет использоваться для агрегации данных.
Пример базовой сегментации:
function sendMetricToAnalytics(metric, pageId) {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify({
name: metric.name,
value: metric.value,
id: pageId,
delta: metric.delta,
}),
headers: {
'Content-Type': 'application/json'
}
});
}
const pageId = window.location.pathname;
getLCP(metric => sendMetricToAnalytics(metric, pageId));
getFID(metric => sendMetricToAnalytics(metric, pageId));
getCLS(metric => sendMetricToAnalytics(metric, pageId));
Ключевые моменты:
window.location.pathname хорошо подходит для сайтов с
уникальными URL.На больших платформах часто встречаются повторяющиеся шаблоны страниц: карточки товара, статьи блога, профили пользователей. Для правильного анализа важно группировать метрики не только по URL, но и по типу шаблона.
Пример определения шаблона:
function getTemplateId() {
if (document.querySelector('.product-page')) return 'product';
if (document.querySelector('.blog-article')) return 'article';
if (document.querySelector('.profile-page')) return 'profile';
return 'unknown';
}
const templateId = getTemplateId();
getLCP(metric => sendMetricToAnalytics(metric, templateId));
getFID(metric => sendMetricToAnalytics(metric, templateId));
getCLS(metric => sendMetricToAnalytics(metric, templateId));
Преимущества сегментации по шаблону:
Иногда требуется учитывать дополнительные параметры, влияющие на опыт пользователя:
mobile,
desktop, tablet)Пример расширенной отправки метрик с сегментацией:
function sendMetricWithSegments(metric) {
const segmentData = {
page: window.location.pathname,
template: getTemplateId(),
device: /Mobi|Android/i.test(navigator.userAgent) ? 'mobile' : 'desktop',
region: window.navigator.language,
value: metric.value,
name: metric.name,
delta: metric.delta
};
fetch('/analytics', {
method: 'POST',
body: JSON.stringify(segmentData),
headers: { 'Content-Type': 'application/json' }
});
}
getLCP(sendMetricWithSegments);
getFID(sendMetricWithSegments);
getCLS(sendMetricWithSegments);
Такой подход позволяет строить многомерную аналитику, выявлять проблемы в конкретных сегментах и отслеживать метрики в динамически меняющихся условиях.
Сегментация по странице и шаблону играет ключевую роль в A/B тестах:
templateId.Сегментация по странице и шаблону в Web Vitals позволяет формировать детальную и точную аналитику пользовательского опыта, выявлять узкие места производительности и оптимизировать интерфейс с высокой точностью.