Оптимизация React приложения без useMemo

Реакт - очень оптимизированный фреймворк, почти всегда реакт приложений работают отлично, быстро и в 60фпс благодаря Fiber. Но не редко встречаются компоненты которые отрисовывают большое количество данных, и если этот компонент будет ререндериться часто, приложение будет лагать.

Рассмотрим пример

Приложение на скрине ниже рендерит 30.000 смайлов на каждый ререндер, ререндеры происходят на каждое движение мышки из-за этого приложение лагает

Приложение

Лаги

На примере видно что приложение рендерится далеко не в 60 fps

Оптимизация

Нам нужно сделать так чтобы при изменении стейта mousePosition не ререндерился список из 30.000 элементов, вот какими способами это можно сделать

Пропс children

Компонент Mouse

App

Теперь рендеринг снвоа в 60 fps

Вынести список в отдельный компонент

Второй способ

Вспомним в каких случаях происходит ререндер компонента

  1. Изменение стейта
  2. Изменение пропсов
  3. При ререндере родительского компонента дочерние компоненты будут ререндериться если они не мемоизированы

При такой структуре компонентов ничего не вызывает ререндер компонента и это не вияет на перфоманс

Не бойтесь декомпозировать компоненты и помните, что помимо мемоизации существует еще много более выгодных способов повысить производительность реакт приложения