В библиотеке Web Vitals при измерении метрик производительности крайне важна сегментация по типу устройства. Разделение данных на мобильные и десктопные устройства позволяет более точно анализировать реальное поведение пользователей, так как показатели на смартфонах и на компьютерах могут существенно различаться.
Тип устройства чаще всего определяется по user-agent браузера, но для целей анализа Web Vitals предпочтительнее использовать более надежные методы, ориентированные на характеристики устройства:
window.innerWidth) —
простая эвристика для различения мобильных и десктопных пользователей.
Обычно устройства с шириной экрана менее 768 пикселей считаются
мобильными.window.matchMedia('(pointer: coarse)')) — наличие
сенсорного интерфейса может дополнительно уточнить тип устройства.Пример кода для классификации:
function detectDeviceType() {
const isMobile = window.innerWidth < 768 || matchMedia('(pointer: coarse)').matches;
return isMobile ? 'mobile' : 'desktop';
}
Библиотека web-vitals предоставляет функции для сбора ключевых показателей: CLS, LCP, FID, TTFB и INP. Для сегментации необходимо добавлять к каждому измерению информацию о типе устройства:
import { getCLS, getFID, getLCP, getTTFB, getINP } from 'web-vitals';
function sendToAnalytics(metric) {
const payload = {
name: metric.name,
value: metric.value,
id: metric.id,
device: detectDeviceType()
};
// Отправка данных на сервер аналитики
navigator.sendBeacon('/analytics', JSON.stringify(payload));
}
getCLS(sendToAnalytics);
getFID(sendToAnalytics);
getLCP(sendToAnalytics);
getTTFB(sendToAnalytics);
getINP(sendToAnalytics);
Таким образом, каждая метрика сопровождается дополнительным полем
device, что позволяет в аналитике строить
сравнительные отчеты по платформам.
После сбора данных сегментация позволяет:
Сравнивать мобильные и десктопные показатели:
Выявлять критические узкие места:
Настраивать приоритеты оптимизации:
function getDeviceCategory() {
const width = window.innerWidth;
if (width < 576) return 'smartphone';
if (width < 1024) return 'tablet';
return 'desktop';
}
function sendVitals(metric) {
const payload = {
name: metric.name,
value: metric.value,
id: metric.id,
category: getDeviceCategory()
};
navigator.sendBeacon('/analytics', JSON.stringify(payload));
}
[getCLS, getFID, getLCP, getTTFB, getINP].forEach(fn => fn(sendVitals));
Такой подход позволяет строить детальные отчеты с разделением на смартфоны, планшеты и десктопы, что дает максимально точную картину производительности для всех типов пользователей.
Сегментация по устройствам в Web Vitals — фундаментальный шаг для правильного анализа пользовательского опыта, позволяющий выявлять проблемные сценарии и нацелено улучшать производительность.