Profiler¶
<Profiler>
позволяет программно измерить производительность рендеринга дерева React.
1 2 3 |
|
Описание¶
<Profiler>
¶
Оберните дерево компонентов в <Profiler>
для измерения его производительности рендеринга.
1 2 3 |
|
Пропсы¶
id
: Строка, идентифицирующая часть пользовательского интерфейса, которую вы измеряете.onRender
: Обратный вызовonRender
, который React вызывает каждый раз, когда компоненты в профилированном дереве обновляются. Он получает информацию о том, что было отрисовано и сколько времени это заняло.
Предостережения¶
- Профилирование добавляет дополнительные накладные расходы, поэтому по умолчанию оно отключено в производственной сборке. Чтобы включить профилирование на производстве, вам нужно включить специальную производственную сборку с включенным профилированием.
onRender
callback¶
React будет вызывать ваш обратный вызов onRender
с информацией о том, что было отрисовано.
1 2 3 4 5 6 7 8 9 10 |
|
Параметры¶
id
: Строковыйid
пропс дерева<Profiler>
, которое только что было зафиксировано. Это позволяет определить, какая часть дерева была зафиксирована, если вы используете несколько профилировщиков.phase
:"mount"
,"update"
или"nested-update"
. Это позволяет узнать, было ли дерево только что смонтировано в первый раз или было перерендерировано из-за изменения пропсов, состояния или хуков.actualDuration
: Количество миллисекунд, потраченных на рендеринг<Profiler>
и его потомков для текущего обновления. Это показывает, насколько хорошо поддерево использует мемоизацию (например,memo
иuseMemo
). В идеале это значение должно значительно уменьшиться после первоначального монтажа, поскольку многие потомки будут нуждаться в повторном рендеринге только в случае изменения их специфических пропсов.baseDuration
: Число миллисекунд, определяющее, сколько времени потребуется для повторного отображения всего поддерева<Profiler>
без каких-либо оптимизаций. Оно вычисляется путем суммирования последних длительностей рендеринга каждого компонента в дереве. Это значение оценивает стоимость рендеринга в худшем случае (например, при первоначальном монтаже или для дерева без мемоизации). СравнитеactualDuration
с ним, чтобы узнать, работает ли мемоизация.startTime
: Числовая метка времени, когда React начал рендеринг текущего обновления.endTime
: Числовая метка времени, когда React зафиксировал текущее обновление. Это значение разделяется между всеми профилировщиками в коммите, что позволяет группировать их при желании.
Использование¶
Измерение производительности рендеринга программно¶
Оберните компонент <Profiler>
вокруг дерева React, чтобы измерить его производительность рендеринга.
1 2 3 4 5 6 |
|
Он требует два пропса: id
(строка) и обратный вызов onRender
(функция), который React вызывает каждый раз, когда компонент в дереве "фиксирует" обновление.
Профилирование в сборке
Профилирование добавляет некоторые дополнительные накладные расходы, поэтому по умолчанию оно отключено в производственной сборке. Чтобы включить профилирование на производстве, вам нужно включить специальную производственную сборку с включенным профилированием.
Браузерный Profiler
<Profiler>
позволяет вам собирать измерения программно. Если вы ищете интерактивный профилировщик, попробуйте вкладку Profiler в React Developer Tools. Она предоставляет аналогичную функциональность в виде расширения для браузера.
Измерение различных частей приложения¶
Вы можете использовать несколько компонентов <Profiler>
для измерения различных частей вашего приложения:
1 2 3 4 5 6 7 8 |
|
Вы также можете вложить компоненты <Profiler>
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Хотя <Profiler>
является легковесным компонентом, его следует использовать только при необходимости. Каждое его использование добавляет некоторые накладные расходы процессора и памяти в приложение.
Источник — https://react.dev/reference/react/Profiler