Web Vitals — это набор метрик, разработанных для оценки пользовательского опыта на веб-странице. В JavaScript для измерения этих метрик используются специализированные API и библиотеки, которые позволяют отслеживать показатели в реальном времени. Основные показатели, на которые стоит обратить внимание: LCP (Largest Contentful Paint), CLS (Cumulative Layout Shift), INP (Interaction to Next Paint), FCP (First Contentful Paint) и TTFB (Time to First Byte). Каждая из этих метрик описывает отдельный аспект пользовательского восприятия скорости и стабильности страницы.
LCP отражает время загрузки самого большого видимого элемента на странице — обычно это крупное изображение или блок текста. Важные моменты при работе с LCP:
Метод измерения: Используется объект
PerformanceObserver с типом
largest-contentful-paint. Пример:
import { getLCP } from 'web-vitals';
getLCP(metric => {
console.log('LCP:', metric.value, 'ms');
console.log('Элемент:', metric.element);
});Ключевые свойства метрики:
value — время в миллисекундах от начала загрузки
страницы до появления LCP-элемента.element — DOM-элемент, который был измерен.Оптимизация LCP:
lazy-loading) для неключевых элементов.<link rel="preload">.CLS измеряет визуальную стабильность страницы, суммируя смещения элементов, произошедшие после загрузки. Важные аспекты:
Метод измерения:
import { getCLS } from 'web-vitals';
getCLS(metric => {
console.log('CLS:', metric.value);
});Ключевые свойства:
value — суммарная величина смещений (от 0 до 1).entries — массив объектов LayoutShift, содержащих
данные о каждом смещении.Оптимизация CLS:
INP измеряет задержку между взаимодействием пользователя и моментом, когда браузер отображает следующий кадр. Это показатель отзывчивости интерфейса:
Метод измерения:
import { getINP } from 'web-vitals';
getINP(metric => {
console.log('INP:', metric.value, 'ms');
});Ключевые свойства:
value — максимальная задержка среди всех
взаимодействий.entries — события взаимодействий с пользователем,
включая click, keydown,
pointerdown.Оптимизация INP:
requestIdleCallback или setTimeout.FCP измеряет время до появления первого видимого контента на странице. Он позволяет понять, как быстро пользователь видит что-либо после начала загрузки:
Метод измерения:
import { getFCP } from 'web-vitals';
getFCP(metric => {
console.log('FCP:', metric.value, 'ms');
});Ключевые свойства:
value — время в миллисекундах до появления первого
текста или изображения.entries — массив PerformanceEntry для событий типа
paint.Оптимизация FCP:
TTFB измеряет время от запроса страницы до получения первого байта от сервера. Этот показатель напрямую связан с серверной производительностью и сетью:
Метод измерения:
import { getTTFB } from 'web-vitals';
getTTFB(metric => {
console.log('TTFB:', metric.value, 'ms');
});Ключевые свойства:
value — время в миллисекундах от запроса до первого
байта.entries — объекты PerformanceEntry с деталями
запроса.Оптимизация TTFB:
Каждая из метрик Web Vitals предоставляет конкретную и измеримую информацию, позволяющую целенаправленно улучшать опыт пользователя на веб-странице. Сбалансированное отслеживание и оптимизация LCP, CLS, INP, FCP и TTFB формируют фундамент эффективного веб-приложения.