
Популярная интерфейсная библиотека React используется для создания быстрых, отзывчивых и интерактивных онлайн-приложений. Тем не менее, вероятность проблем с производительностью возрастает вместе с размером и сложностью приложений React. В этой статье блога будут рассмотрены сложные методы повышения производительности React и обеспечения правильной работы вашего приложения.
1 – Используйте React.memo ()
Компонент более высокого порядка React.memo() можно использовать для расширения функциональности функциональных компонентов. Чтобы оценить необходимость повторного рендеринга компонента, он сравнивает старые пропсы, которые были кэшированы, с новыми. Производительность будет быстрее, если компонент не будет перерисовываться, если реквизиты не изменились.
Возьмем, к примеру, следующий функциональный элемент:
function MyComponent(props) {
// component logic
}
Чтобы оптимизировать этот компонент с помощью React.memo(), просто оберните его следующим образом:
const MemoizedComponent = React.memo(MyComponent);
2 – Используйте хук useCallback()
Используйте хук useCallback(), чтобы запомнить подпрограммы и остановить бессмысленный повторный рендеринг. Экземпляр функции кэшируется, и новый экземпляр создается только в том случае, если зависимости изменились.
Рассмотрим, например, следующий элемент:
function MyComponent(props) {
const handleClick = () => {
// function logic
};
return (
<button onClick={handleClick}>Click me</button>
);
}
Чтобы оптимизировать этот компонент с помощью useCallback(), просто оберните функцию handleClick следующим образом:
const handleClick = useCallback(() => {
// function logic
}, [/* dependencies */]);
3 – Используйте хук useMemo()
Значения можно запомнить с помощью хука useMemo(), чтобы избежать бессмысленных перерасчетов. Вычисленное значение кэшируется и пересчитывается только в том случае, если зависимости изменились.
Рассмотрим, например, следующий элемент:
function MyComponent(props) {
const expensiveValue = computeExpensiveValue();
return (
<div>{expensiveValue}</div>
);
}
Чтобы оптимизировать этот компонент с помощью useMemo(), просто оберните функцию calculateExpensiveValue() следующим образом:
const expensiveValue = useMemo(() => {
return computeExpensiveValue();
}, [/* dependencies */]);
4- Используйте React Profiler
Чтобы найти узкие места в производительности вашего приложения, используйте встроенный инструмент React Profiler. Он работает, измеряя время, необходимое для рендеринга каждого компонента, и показывая результаты в виде графика.
Просто импортируйте React Profiler из пакета «react» и включите компонент «Profiler» в свое приложение, чтобы начать его использовать:
import { Profiler } from 'react';
function App(props) {
// app logic
}
const WrappedApp = () => (
<Profiler id="app" onRender={callback}>
<App />
</Profiler>
);
В то время как атрибут onRender используется для указания функции обратного вызова, которая будет запускаться после каждого рендеринга, свойство id используется для идентификации профилируемого компонента.
5 – Используйте разделение кода
С помощью метода разделения кода ваша программа делится на более мелкие «пакеты», которые можно загружать по мере необходимости. Это может ускорить начальную загрузку вашего приложения и сократить объем JavaScript, который необходимо загрузить.
Вы можете использовать такой инструмент, как Webpack или create-react-app, которые поставляются со встроенной поддержкой разделения кода, чтобы добавить разделение кода в ваше приложение React. В качестве альтернативы вы можете загружать модули асинхронно, используя динамическую функцию import():
import('./my-module.js').then((module) => {
// use module
});
Заключение
Подводя итог, вот ключевые методы оптимизации производительности React:
- Используйте React.memo() для запоминания функциональных компонентов и предотвращения ненужного повторного рендеринга.
- Используйте хук useCallback() для запоминания функций и предотвращения ненужного повторного рендеринга.
- Используйте хук useMemo() для запоминания значений и предотвращения ненужных повторных вычислений.
- Используйте React Profiler для выявления узких мест в производительности вашего приложения.
- Используйте разделение кода, чтобы разбить приложение на более мелкие фрагменты и сократить время первоначальной загрузки.
Внедряя эти методы, вы можете гарантировать бесперебойную работу своего приложения React, даже если оно увеличивается в размере и усложняется. Не забывайте постоянно отслеживать и оптимизировать производительность вашего приложения, чтобы обеспечить наилучшее взаимодействие с пользователем.