Что такое пользовательский опыт с точки зрения производительности

Web Vitals — это набор ключевых метрик, оценивающих пользовательский опыт с точки зрения производительности веб-страниц. Они помогают измерять, насколько быстро страница загружается, насколько быстро становится интерактивной и насколько стабильно отображается для пользователя.

Среди основных показателей выделяются:

  • Largest Contentful Paint (LCP) – измеряет время, за которое загружается наибольший видимый элемент контента на странице. Важен для оценки скорости загрузки страницы. Идеальное значение LCP ≤ 2,5 секунд.
  • First Input Delay (FID) – отражает задержку между первой интеракцией пользователя (например, клик или нажатие клавиши) и моментом, когда браузер начинает обработку этой интеракции. Оптимальное значение FID ≤ 100 мс.
  • Cumulative Layout Shift (CLS) – оценивает стабильность визуального контента страницы. Плохой CLS означает, что элементы неожиданно смещаются, что ухудшает пользовательский опыт. Идеальное значение CLS ≤ 0,1.

Установка и подключение библиотеки Web Vitals

Для начала работы с библиотекой необходимо установить её через npm:

npm install web-vitals

Или подключить через CDN:

<script src="https://unpkg.com/web-vitals@2.1.4/dist/web-vitals.iife.js"></script>

После подключения можно использовать функции для измерения основных метрик:

import { getLCP, getFID, getCLS } from 'web-vitals';

getLCP(console.log);
getFID(console.log);
getCLS(console.log);

Каждая из функций принимает callback, который получает объект метрики с ключевыми полями: name, value и id.

Работа с метриками

Largest Contentful Paint (LCP)

LCP отслеживает время рендеринга самого крупного блока контента, видимого пользователю. Крупный блок может быть текстом, изображением или видео.

Пример использования:

import { getLCP } from 'web-vitals';

getLCP((metric) => {
  console.log('LCP:', metric.value, 'ms');
});

Можно отправлять данные на сервер для аналитики:

getLCP((metric) => {
  fetch('/analytics', {
    method: 'POST',
    body: JSON.stringify(metric),
    keepalive: true
  });
});

First Input Delay (FID)

FID измеряет интерактивность страницы. Чем меньше задержка между действием пользователя и реакцией страницы, тем лучше UX.

import { getFID } from 'web-vitals';

getFID((metric) => {
  console.log('FID:', metric.value, 'ms');
});

FID полезен для анализа того, как скрипты и тяжелые ресурсы влияют на реакцию интерфейса.

Cumulative Layout Shift (CLS)

CLS фиксирует визуальные сдвиги элементов страницы. Даже если страница быстро загрузилась, резкие перемещения элементов создают негативное впечатление.

import { getCLS } from 'web-vitals';

getCLS((metric) => {
  console.log('CLS:', metric.value);
});

Продвинутая настройка

Web Vitals позволяет настраивать измерения и объединять их с пользовательской аналитикой:

import { getLCP, getFID, getCLS } from 'web-vitals';

function sendToAnalytics(metric) {
  const body = JSON.stringify({
    metricName: metric.name,
    value: metric.value,
    id: metric.id
  });

  navigator.sendBeacon('/analytics', body);
}

getLCP(sendToAnalytics);
getFID(sendToAnalytics);
getCLS(sendToAnalytics);

Использование navigator.sendBeacon гарантирует, что данные будут отправлены даже при закрытии вкладки пользователем.

Анализ и интерпретация данных

Метрики Web Vitals не существуют сами по себе, их нужно интерпретировать в контексте страницы:

  • LCP показывает, когда пользователь видит основное содержимое. Значение > 2,5 секунд указывает на проблемы с загрузкой изображений, рендерингом шрифтов или тяжелыми скриптами.
  • FID отражает интерактивность. Высокие значения появляются при блокирующих JavaScript задачах или неэффективном DOM.
  • CLS сигнализирует о смещениях контента, которые могут происходить из-за динамически загружаемых изображений или рекламных блоков без заданных размеров.

Интеграция с инструментами мониторинга

Web Vitals легко интегрируется с Google Analytics 4 и другими аналитическими платформами. Пример для GA4:

import { getLCP, getFID, getCLS } from 'web-vitals';

function sendToGA(metric) {
  gtag('event', metric.name, {
    event_category: 'Web Vitals',
    value: metric.value,
    event_label: metric.id,
    non_interaction: true
  });
}

getLCP(sendToGA);
getFID(sendToGA);
getCLS(sendToGA);

Такой подход позволяет отслеживать показатели UX в реальном времени на всех страницах сайта.

Оптимизация на основе Web Vitals

  • Для улучшения LCP: оптимизация изображений, предварительная загрузка шрифтов, минимизация блокирующих скриптов.
  • Для снижения FID: разбивка крупных скриптов, использование requestIdleCallback, оптимизация рендеринга.
  • Для уменьшения CLS: задание размеров для изображений и видео, использование placeholder элементов, корректная работа с рекламными блоками.

Web Vitals превращает субъективное ощущение скорости и стабильности страницы в конкретные, измеримые показатели, что делает оптимизацию пользовательского опыта структурированной и эффективной.