Performance API

Материал из Энциклопедия интернет-маркетинга MarketWiki

Performance API - это набор веб-стандартов, встроенных в современные браузеры, который позволяет разработчикам измерять время загрузки страницы, выполнения скриптов, сетевых запросов и других событий с точностью до микросекунд для оптимизации производительности сайта.

Performance API используется в веб-аналитике для сбора реальных данных о скорости загрузки сайта у пользователей (Real User Monitoring, RUM), в инструментах мониторинга (Lighthouse, WebPageTest) и для отладки производительности в процессе разработки. Например, разработчик может измерить, сколько времени занимает рендеринг списка товаров в интернет-магазине, чтобы найти узкое место в коде.

API был введён в 2012 году и постоянно расширяется. В 2026 году ключевыми его компонентами являются Navigation Timing (загрузка страницы), Resource Timing (загрузка ресурсов), Paint Timing (метрики FCP, LCP) и Layout Instability (CLS). В отличие от сторонних инструментов, Performance API предоставляет данные, собранные непосредственно браузером, без накладных расходов на подключение внешних библиотек.

Кратко

[править]

Performance API - это встроенный в браузер инструмент для измерения скорости загрузки сайта. Он предоставляет данные о времени рендеринга страницы, загрузке изображений, выполнении скриптов и других этапах загрузки.

Что такое Performance API

[править]

Performance API - это интерфейс программирования приложений, встроенный в браузеры (Chrome, Firefox, Safari, Edge), который предоставляет высокоточные метрики времени загрузки и выполнения веб-страницы. Данные доступны через объект performance в консоли браузера и включают несколько подсистем.

[править]

Измеряет время навигации и загрузки документа: время DNS, установку TCP-соединения, время до первого байта (TTFB), время парсинга DOM и полной загрузки страницы (DOMContentLoaded, load).

Resource Timing

[править]

Фиксирует время загрузки каждого ресурса на странице: изображений, CSS, JavaScript, шрифтов. Для каждого ресурса доступны временные метки: начало запроса, ожидание, загрузка контента.

Paint Timing

[править]

Предоставляет метрики рендеринга: FCP (First Contentful Paint) - момент появления первого контента, LCP (Largest Contentful Paint) - момент отображения самого крупного элемента.

Layout Instability

[править]

Измеряет визуальную стабильность страницы. Метрика CLS (Cumulative Layout Shift) фиксирует, насколько сильно элементы страницы смещаются в процессе загрузки, что влияет на пользовательский опыт.

Long Tasks

[править]

Отслеживает длительные задачи, блокирующие основной поток браузера. Задачи, выполняющиеся дольше 50 миллисекунд, считаются «длинными» и ухудшают отзывчивость интерфейса (INP).

User Timing

[править]

Позволяет разработчику добавлять собственные временные метки с помощью методов performance.mark() и performance.measure() для измерения времени выполнения произвольных участков кода.

Как работает Performance API

[править]

Браузер автоматически записывает временные метки для каждого этапа загрузки страницы: начало навигации, запрос DNS, установка соединения, получение первого байта, парсинг HTML, загрузка ресурсов, рендеринг. Разработчик может получить эти данные через вызов performance.getEntries() или подписаться на события PerformanceObserver для сбора метрик в реальном времени.

Пример получения метрик

[править]
// Получение всех метрик загрузки ресурсов
const resources = performance.getEntriesByType('resource');
resources.forEach(resource => {
  console.log(`${resource.name}: ${resource.duration}ms`);
});

// Наблюдение за LCP
const observer = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  entries.forEach(entry => {
    console.log('LCP элемент:', entry.element);
    console.log('Время LCP:', entry.startTime);
  });
});
observer.observe({ type: 'largest-contentful-paint', buffered: true });

Отправка данных на сервер

[править]
// Сбор и отправка метрик в аналитику
window.addEventListener('load', () => {
  const paintMetrics = performance.getEntriesByType('paint');
  const navigation = performance.getEntriesByType('navigation')[0];
  
  const data = {
    fcp: paintMetrics.find(e => e.name === 'first-contentful-paint')?.startTime,
    lcp: null, // собирается через PerformanceObserver
    ttfb: navigation.responseStart - navigation.requestStart,
    domLoad: navigation.domContentLoadedEventEnd - navigation.requestStart
  };
  
  navigator.sendBeacon('/api/metrics', JSON.stringify(data));
});

Преимущества

[править]
  • Высокая точность: измерения с точностью до микросекунд.
  • Без дополнительных библиотек: встроен во все современные браузеры.
  • Реальные данные пользователей (RUM): позволяет собирать статистику производительности у реальной аудитории.
  • Интеграция с Core Web Vitals: напрямую предоставляет метрики LCP, INP, CLS.
  • Гибкость: возможность создавать собственные метрики через User Timing API.

Недостатки

[править]
  • Ограниченная поддержка старых браузеров: Internet Explorer 11 имеет только базовую функциональность.
  • Требует JavaScript: для сбора и отправки данных необходимо, чтобы в браузере был включён JS.
  • Сложность интерпретации: требует понимания жизненного цикла загрузки страницы и всех подсистем API.
  • Объём данных: при активном сборе всех ресурсов может генерировать большой объём данных для отправки.

Где используется

[править]
  • Real User Monitoring (RUM): сбор данных о производительности у реальных пользователей.
  • Lighthouse и PageSpeed Insights: используют Performance API для диагностики.
  • Веб-аналитика: интеграция с системами мониторинга (Google Analytics, Яндекс Метрика) для отчётов по скорости.
  • Отладка разработчиков: Chrome DevTools использует Performance API для отображения временной шкалы.
  • Собственные системы мониторинга: отправка метрик на внутренние серверы для построения дашбордов.

Сравнение с альтернативами

[править]
Инструмент Источник данных Применение
Performance API Встроен в браузер Real User Monitoring, отладка
Lighthouse Эмуляция в Chrome Лабораторное тестирование
WebPageTest Реальные устройства Детальный анализ с разных географий
Google Analytics Performance API + отправка Мониторинг Core Web Vitals в продакшене
Яндекс Метрика Performance API + отправка Мониторинг производительности в российских реалиях
Сторонние RUM-сервисы Performance API + отправка Расширенная аналитика, дашборды

Интеграция с системами аналитики

[править]

Google Analytics 4

[править]

GA4 автоматически собирает некоторые метрики Core Web Vitals через расширенную аналитику. Для отправки собственных метрик можно использовать gtag:

gtag('event', 'performance_metric', {
  'metric_name': 'LCP',
  'metric_value': lcpValue,
  'metric_unit': 'ms'
});

Яндекс.Метрика

[править]

Яндекс.Метрика автоматически собирает метрики скорости загрузки через встроенный скрипт. Для отправки кастомных метрик используется метод yaCounterXXXXXX.reachGoal().

Часто задаваемые вопросы

[править]

Какие метрики Core Web Vitals доступны через Performance API?

[править]

Все 3 метрики Core Web Vitals доступны: LCP (Largest Contentful Paint) через Paint Timing, INP (Interaction to Next Paint) через Event Timing, CLS (Cumulative Layout Shift) через Layout Instability API.

Как отправить данные Performance API в Google Analytics?

[править]

Через событие gtag или через измерение в Google Tag Manager. Можно использовать готовые шаблоны для отправки Core Web Vitals или написать собственный скрипт с использованием navigator.sendBeacon() для асинхронной отправки.

Поддерживает ли Performance API мобильные браузеры?

[править]

Да, все современные мобильные браузеры (Chrome for Android, Safari iOS, Samsung Internet) поддерживают Performance API. Ограничения касаются только устаревших версий (iOS 12 и ниже).

Как измерить время выполнения собственного кода?

[править]

С помощью User Timing API: performance.mark('start') для установки метки начала, performance.mark('end') для метки окончания, затем performance.measure('name', 'start', 'end') для расчёта времени.

Влияет ли Performance API на производительность сайта?

[править]

Сам по себе API не влияет на производительность - браузер и так собирает эти данные. Влияет только частота вызовов и отправка данных на сервер. Рекомендуется использовать PerformanceObserver и отправлять данные пакетно.

Почему значения Performance API не совпадают с PageSpeed Insights?

[править]

PageSpeed Insights (Lighthouse) использует лабораторные данные с эмулируемыми устройствами. Performance API собирает реальные данные пользователей (RUM), которые зависят от устройства, сети и поведения конкретного пользователя. Расхождения - нормальное явление.

Связанные термины

[править]