Популярная интерфейсная библиотека 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, даже если оно увеличивается в размере и усложняется. Не забывайте постоянно отслеживать и оптимизировать производительность вашего приложения, чтобы обеспечить наилучшее взаимодействие с пользователем.