intermediate
Code splitting
Делите routes, тяжёлые виджеты и редкие фичи, чтобы первая навигация грузила только нужное сейчас.
Code splitting делит приложение на chunks, загружаемые по требованию — по route, feature или тяжёлой библиотеке — чтобы первая навигация тащила меньше JavaScript.
const AdminPanel = lazy(() => import('./AdminPanel'));
<Route path="/admin" element={
<Suspense fallback={<Spinner />}>
<AdminPanel />
</Suspense>
} />
| Граница split | Хороший случай | |---------------|----------------| | Route | Dashboard vs маркетинговый сайт | | Feature flag | Beta-редактор не нужен при first paint | | Heavy lib | Charting, PDF, rich text editor |
Балансируйте split с **waterfall запросов**: слишком мелкие chunks увеличивают RTT. Prefetch вероятных следующих routes после idle. В Next.js — route-based splitting плюс `dynamic()` для client-only виджетов.
На интервью: route vs component splitting; границы Suspense; prefetch; связка с SSR/hydration cost.
Типовые ошибки: split всего на микро-chunks; lazy above-the-fold; нет error boundaries на lazy routes.
Компромисс — меньший initial bundle против лишних round trip и loading states.
Чеклист:
- Split на route и редких feature.
- Prefetch вероятных следующих routes.
- Минимум chunks на critical path.
- Waterfall в DevTools Network.