<Profiler> вимірює час рендеру частини дерева з коду - для автоматичного збору метрик, а не ручного аналізу в DevTools.
import { Profiler, type ProfilerOnRenderCallback } from 'react';
const onRender: ProfilerOnRenderCallback = (id, phase, actualDuration, baseDuration, startTime, commitTime) => {
if (actualDuration > 16) {
metrics.record('slow-render', { id, phase, actualDuration, baseDuration });
}
};
<Profiler id="VacancyTable" onRender={onRender}>
<VacancyTable />
</Profiler>
Параметри колбеку:
id- назва профілера (для розрізнення кількох);phase-"mount","update"чи"nested-update"(оновлення, викликане зміною стану в ефекті під час коміту);actualDuration- скільки мілісекунд зайняв рендер цього дерева в цьому коміті. Якщо мемоізація працює, він помітно менший заbaseDuration;baseDuration- оцінка часу рендеру всього дерева без оптимізацій (сума останніх часів рендеру всіх компонентів). Показує «найгірший випадок»;startTime,commitTime- мітки часу початку рендеру й коміту.
Кілька профілерів можна ставити поруч і вкладати - щоб порівняти частини сторінки.
Важливо про production: профілювання додає накладних витрат, тому в звичайній production-збірці Profiler вимкнено - колбек не викликається. Для вимірювання на продакшені потрібна спеціальна збірка з профілюванням (react-dom/profiling), яку роздають частині користувачів чи використовують на тестовому стенді. У режимі розробки цифри завищені й годяться лише для відносних порівнянь.
Для чого використовують:
- регресійні тести продуктивності в CI: рендер великої таблиці не повинен перевищити поріг;
- моніторинг важких екранів у реальних користувачів (зі збіркою профілювання);
- порівняння до й після оптимізації.
Обмеження:
Profilerміряє лише час рендеру React, а не завантаження даних, розкладку браузера чи малювання. Для повної картини взаємодії - метрика INP і вкладка Performance браузера;- не обгортати кожен компонент - профілер сам додає витрати; ставити на межі великих блоків.
Альтернатива для інтерактивного аналізу - вкладка Profiler у React DevTools з тими самими даними, flamegraph і причинами рендерів.