Skip to main content

Що таке "code splitting"?

Що таке Code Splitting

Code splitting (розділення коду) - це процес, при якому твій JavaScript-бандл (зазвичай великий файл) розбивається на кілька менших частин (чанків). Браузер завантажує лише потрібні частини коду, а решту - за потреби (ліниво).

Ідея:

Замість одного гігантського bundle.js, завантажувати лише той код, який реально потрібен користувачу на цьому екрані.

Навіщо це потрібно

Без code splitting:

  • браузер скачує весь код застосунку одразу,
  • навіть той, який ніколи не буде виконаний.

Це збільшує:

  • розмір першого запиту (bundle.js може бути десятки МБ),
  • час завантаження сторінки,
  • час виконання скриптів (парсинг і компіляція JS).

З code splitting: Завантажується лише "шматочок" потрібного коду → швидший "Time to Interactive" Решта частин підвантажується лише при переході на інші сторінки чи дії користувача.

Як це працює

Code splitting зазвичай реалізується збирачем (наприклад, Webpack, Vite, Next.js) і спирається на динамічний імпорт:

javascript
// звичайний імпорт - завантажується одразу import heavyLib from './heavy-lib'; // динамічний імпорт - завантажується за вимогою const module = await import('./heavy-lib');

import() повертає Promise, який завантажує модуль лише тоді, коли він реально потрібен.

Приклад (React)

Без code splitting:

javascript
import About from './About'; function App() { return <About />; }

Тут About завантажується одразу, навіть якщо користувач не відкриє цю сторінку.

З code splitting (лінива завантаження):

javascript
import React, { lazy, Suspense } from 'react'; const About = lazy(() => import('./About')); function App() { return ( <Suspense fallback={<div>Завантаження...</div>}> <About /> </Suspense> ); }

Тут About буде завантажено лише коли він дійсно знадобиться - наприклад, при переході на сторінку "Про нас".

Типи code splitting

ТипЩо робитьПриклад
Entry splittingРозділяє код за точками входу (наприклад, admin.js, user.js)Webpack entry
Vendor splittingВідокремлює сторонні бібліотеки (react, lodash) від твого кодуoptimization.splitChunks
Dynamic import splittingДілить код за динамічними імпортами (lazy loading)import('./module')
Route-based splittingДілення за сторінками (у Next.js, React Router тощо)Автоматично за маршрутами

Як це робить Next.js

У Next.js code splitting вбудовано "з коробки":

  • Кожна сторінка (pages/about.tsx, pages/contact.tsx) стає окремим чанком.
  • Завантажується лише код поточної сторінки.
  • При навігації Next.js підвантажує JS для наступної сторінки "у фоні".

Тобто тобі не потрібно явно викликати import() - Next.js робить це автоматично.

Приклад вигоди

СценарійБез splittingЗ splitting
Головна сторінкаЗавантажується 3 MB JSЗавантажується 300 KB
Користувач іде на /aboutЗавантажується весь бандлДовантажується ще 100 KB
Час завантаження5 сек1 сек до першого екрана

Підсумок

ПунктОпис
Що цеРозділення коду застосунку на незалежні частини
МетаПрискорити завантаження і підвищити продуктивність
РеалізаціяЧерез import() або автоматично (Next.js, Webpack, Vite)
ПеревагиМенший бандл, швидший TTI, менше пам'яті
Де використовуєтьсяReact, Next.js, Vue, Angular, Webpack, Vite

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.