Skip to main content

Метрики оцінки продуктивності

Продуктивність оцінюють не одним числом, а набором метрик, які покривають чотири рівні: завантаження сторінки в браузері, виконання JavaScript, роботу сервера та суб'єктивне відчуття швидкості. На співбесіді очікують, що ви назвете Core Web Vitals і поясните, чим вимірюється кожен рівень.

Теорія

TL;DR

  • Браузер: FCP, LCP, INP, CLS, TTFB, TBT. Три з них, LCP, INP і CLS, утворюють Core Web Vitals.
  • JavaScript: execution time, memory usage, паузи garbage collector, затримка event loop, FPS, час style, layout і paint.
  • Бекенд: latency, throughput (RPS), error rate, CPU, пам'ять, event loop delay, час запитів до бази, cache hit ratio.
  • UX: TTI, user timing marks, perceived performance.
  • Інтегральні індекси: Speed Index, Lighthouse Performance Score, Core Web Vitals Score.
  • Збирають усе це через Lighthouse, PageSpeed Insights, Performance API, web-vitals SDK, Chrome DevTools, Prometheus і Grafana.

Швидкий приклад

javascript
// Власні позначки часу через User Timing API performance.mark('render-start'); renderList(items); performance.mark('render-end'); performance.measure('render', 'render-start', 'render-end'); const [entry] = performance.getEntriesByName('render'); console.log(`render: ${entry.duration.toFixed(1)} ms`); // Навігаційні метрики сторінки, зокрема TTFB const [nav] = performance.getEntriesByType('navigation'); console.log('TTFB:', nav.responseStart - nav.requestStart, 'ms');

Метрики продуктивності фронтенду

Ці метрики оцінюють, наскільки швидко і плавно сторінка завантажується та реагує:

МетрикаЩо вимірюєХороше значення
FCP (First Contentful Paint)Час до першого відмальованого контенту (текст, зображення)< 1,8 с
LCP (Largest Contentful Paint)Час до показу найбільшого елемента контенту (наприклад, банера, зображення)< 2,5 с
FID (First Input Delay)Затримка між першою дією користувача (клік, скрол) і реакцією сторінки< 100 мс
INP (Interaction to Next Paint)Наскільки швидко інтерфейс реагує на дії користувача (нова метрика, замінює FID)< 200 мс
CLS (Cumulative Layout Shift)Наскільки сильно зміщується контент під час завантаження< 0,1
TTFB (Time To First Byte)Час до отримання першого байта відповіді від сервера< 0,6 с
TBT (Total Blocking Time)Загальний час, коли основний потік (main thread) заблокований і не може реагувати< 200 мс

Ці метрики збирають через:

  • Lighthouse, PageSpeed Insights;
  • Performance API (performance.getEntriesByType('navigation'));
  • Web Vitals SDK.

Метрики продуктивності JavaScript

Для оцінки швидкості виконання JS-коду та його ефективності:

МетрикаЩо оцінює
Execution timeЧас виконання ділянки коду (наприклад, через console.time() або performance.now())
Memory usageСпоживання пам'яті (performance.memory.usedJSHeapSize)
Garbage collection timeЧастота і тривалість пауз GC
Event loop lag / latencyНаскільки сильно блокується головний потік
FPS (Frames per second)Частота оновлення інтерфейсу (має бути 60 FPS)
Recalculate Style / Layout / Paint timeЧас, витрачений на відмальовування та перебудову DOM
Script parse/compile timeЧас парсингу та компіляції JS-файлів

Інструменти:

  • Chrome DevTools, вкладка Performance;
  • React Profiler, Vue DevTools;
  • Lighthouse, розділ «Diagnostics».

Метрики продуктивності бекенду

Якщо йдеться про Node.js, NestJS, Express чи будь-який API-сервіс:

МетрикаЩо показує
Response Time / LatencyСередній час відповіді сервера
Throughput (RPS)Кількість запитів на секунду
Error rateЧастка неуспішних запитів (4xx/5xx)
CPU usageЗавантаженість процесора
Memory usage (RSS, heap)Використання пам'яті
Event loop delayНаскільки блокується event loop
DB query timeСередній час виконання SQL-запитів
Cache hit ratioЕфективність кешування

Для вимірювання використовують:

  • Prometheus та Grafana;
  • New Relic, Datadog, Sentry Performance;
  • вбудований у Node.js performance API (perf_hooks).

Метрики користувацького досвіду та інтегральні індекси

Метрики UX показують не окремі мілісекунди, а те, наскільки комфортно працювати зі сторінкою:

МетрикаЩо відображає
TTI (Time To Interactive)Коли сторінка стає повністю інтерактивною
TBT + INPНаскільки комфортно взаємодіяти
User timing marksВласні точки через performance.mark() і performance.measure()
Perceived performanceСуб'єктивне відчуття швидкості через skeletons, lazy load, prefetch

Зверху над усім цим стоять складені індекси:

МетрикаСкладена характеристика
Speed IndexНаскільки швидко весь контент візуально завантажується
Performance Score (Lighthouse)Комплексна оцінка від 0 до 100
Core Web Vitals ScoreМетрика Google для SEO та UX

Стисле резюме:

Для браузера, це FCP, LCP, INP, CLS, TBT. Для JS-коду, це execution time, memory, FPS, GC. Для сервера, це latency, RPS, CPU, DB time. Для UX, це TTI, Speed Index, user timings.

Типові помилки

  • Називати лише Lighthouse Score. Це похідне число; інтерв'юер чекає конкретні метрики, з яких воно складається.
  • Згадувати FID як актуальну метрику. З 2024 року INP замінив FID у складі Core Web Vitals, FID лишився історичним.
  • Орієнтуватися тільки на лабораторні дані. Lighthouse на потужному ноутбуці показує одне, реальні користувачі (RUM, field data) інше; потрібні обидва джерела.
  • Міряти середнє замість персентилів. Latency та INP оцінюють за p75 або p95, бо середнє ховає хвіст повільних сесій.
  • Плутати TTFB із часом завантаження. TTFB, це лише перший байт відповіді; сторінка може бути порожньою ще секунди після нього.
  • Довіряти performance.memory. Це нестандартна властивість, доступна переважно в Chromium і з огрубленими значеннями.
  • Оптимізувати без вимірювання. Спочатку профіль у DevTools, потім зміни, інакше час іде на ділянки, які нічого не вирішують.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.