Ответ вслух Middle memo, useMemo, useCallback спрашивают часто обновлено

Как найти и убрать лишние рендеры

Вопрос

Интерфейс тормозит при вводе в форму. Как ты будешь искать причину и что сделаешь?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала воспроизвожу и меряю, а не угадываю. Открываю Profiler в React DevTools, записываю ввод нескольких символов и смотрю, какие компоненты рендерились, сколько это заняло и что стало причиной.

Что должно прозвучать в ответе

  • Воспроизвести и замерить в Profiler React DevTools, на продакшен-сборке

  • Найти, какие компоненты рендерятся и почему (настройка показа причины рендера)

  • Сначала структура: опустить state вниз, передать тяжёлое через children

  • Затем точечно memo, useMemo, useCallback для стабильных props и дорогих вычислений

  • Длинные списки виртуализировать, тяжёлые обновления пометить через useTransition или useDeferredValue

  • Проверить Context: новый объект value на каждом рендере рендерит всех потребителей

Что могут спросить следом

  • Почему замерять нужно на продакшен-сборке?
  • Что изменится, если в проекте включён React Compiler?
  • Как Context вызывает лишние рендеры?

Разбор

Сначала воспроизвожу и меряю, а не угадываю. Открываю Profiler в React DevTools, записываю ввод нескольких символов и смотрю, какие компоненты рендерились, сколько это заняло и что стало причиной. Финальный замер делаю на продакшен-сборке, dev заметно медленнее. Часто оказывается, что state поля живёт слишком высоко, и каждый символ рендерит всю страницу. Тогда опускаю state в отдельный компонент или выношу тяжёлые части в children. Если поддерево всё равно рендерится без нужды, оборачиваю его в memo и стабилизирую props через useCallback и useMemo. Проверяю контекст: если value создаётся заново на каждом рендере, все потребители рендерятся. Для длинных списков ставлю виртуализацию, а для тяжёлой фильтрации по вводу использую useDeferredValue, чтобы поле отвечало сразу. Если в проекте есть React Compiler, ручная мемоизация в основном не нужна, остаются структура и списки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме