Производительность

Тема дорожной карты · React

Оптимизация производительности React — это область, направленная на выявление и устранение ненужных перерендеров, ресурсоёмких вычислений и больших размеров бандла, замедляющих React-приложения в продакшне. Основные инструменты для производительности React — React.memo (мемоизация вывода компонента), useMemo (мемоизация вычисляемых значений) и useCallback (мемоизация ссылок на коллбэки), — все они предотвращают лишний перерендер дочерних компонентов, когда их пропсы не изменились. Разделение кода с помощью React.lazy() и Suspense в сочетании с чанкованием на уровне маршрутов в Next.js или Vite уменьшает начальную JavaScript-нагрузку и улучшает время до интерактивности. Профилирование производительности React с помощью React DevTools Profiler и трассировок производительности браузера помогает фронтенд-разработчикам определить, какие компоненты рендерятся наиболее часто и по какой причине. Глубокое понимание производительности React — включая алгоритм согласования, архитектуру Fiber и конкурентные возможности React 18 — позволяет разработчикам создавать быстрые и отзывчивые пользовательские интерфейсы в любом масштабе.

Как это работает

Производительность — это в основном избегание ненужных ререндеров. React.memo(Component) пропускает ререндер, если props равны по ссылке; парная связка с useMemo/useCallback стабилизирует props. lazy(() => import("./X")) + <Suspense fallback={...}> откладывает загрузку chunk до момента нужды (route-based code splitting). React Profiler (в DevTools) показывает, какой компонент сколько занял и почему ререндерился — читайте перед тюнингом вслепую.

Когда применять

Сначала профайл, потом оптимизация. Lazy-load по route-границе для любого бандла >~200 KB gzipped. Мемоизируйте детей дорогих списков через React.memo + стабильные коллбэки. Windowing (react-window, react-virtualized) — для списков 1000+ элементов. Пропустите useMemo/useCallback для тривиальных значений — оверхед учёта дороже сэкономленного compute в 90% случаев.

Типичные ошибки

Ловушки Производительность: обёртка каждого компонента в React.memo "для производительности" (стоимость сравнений суммируется — мемоизируйте только листья часто ререндерящихся деревьев); мемоизация значений с дешёвым compute (оверхед больше выгоды); большой бандл без code splitting (медленный TTI); оптимизация без замеров (чините не то). Источник истины — вкладка Profiler в React DevTools.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…