Оптимізація збірки Next.js: впроваджуємо Turbopack для швидкої розробки

Збірка фронтенду впирається в хвилини, і правки чекають усі. Ми налаштовуємо Turbopack під ключ: переносимо проєкт, налагоджуємо конфігурацію та режими збірки. Час очікування перезбірки скорочується в рази, команда випускає зміни швидше.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Оптимізація збірки Next.js: впроваджуємо Turbopack для швидкої розробки
Середній
від 4 годин до 2 днів
Часті запитання

Збірка фронтенду впирається в хвилини: де втрачається час

Правка одного рядка в компоненті запускає перезбирання всього проєкту: збирач заново обходить граф модулів, транспілює те, що не змінювалося, і лише потім віддає оновлення в браузер.

На середньому проєкті це 8–20 секунд очікування на кожне збереження, і цикл «змінив — подивився — виправив» розтягується настільки, що розробник перемикається на інше завдання й втрачає контекст.

Далі вступає другий ефект: чим довше перезбирання, тим рідше його запускають. Правки накопичуються пачками, помилки спливають пізніше, а гаряче перезавантаження замість миттєвого оновлення модуля скидає стан сторінки — доводиться заново проходити сценарій до місця, яке правив. Час іде не на код, а на повторне відтворення умов.

Корінь проблеми в тому, як влаштований обхід залежностей. Класичний збирач на кожну зміну перезбирає зачеплені ланцюжки цілком, навіть якщо змінився один модуль із сотні.

Turbopack налаштування змінює модель: він тримає граф інкрементально й перезбирає лише ті вузли, які реально зачеплені правкою, — решта береться з кешу. Час перезбирання падає з десятків секунд до часток секунди, і гаряче перезавантаження оновлює модуль без втрати стану.

Окрема причина повільної збірки Next.js — змішування dev- і prod-режимів. У розробці не потрібні мініфікація, розбиття на чанки під продакшн і повна оптимізація зображень: вони додають секунди до кожного перезбирання, нічого не даючи інженеру.

Розділення конфігурацій і коректне Turbopack налаштування прибирають цю роботу з циклу зворотного зв'язку.

Розбираємо, як це закривається: дивимося профіль збірки, знаходимо, які кроки з'їдають час, і переносимо їх із dev-циклу в продакшн-збірку.

Що дає перехід на новий збирач у розробці

Перехід на новий збирач у режимі розробки змінює не «зручність», а вимірювані величини: час холодного запуску проєкту та час інкрементальної перезбірки після правки файлу.

Різниця проявляється на реальному проєкті з сотнями модулів і десятками маршрутів, де класичний збирач перезбирає граф залежностей повністю, а новий тримає його в пам'яті та оновлює лише задіяні вузли.

Ключовий ефект — інкрементальна перезбірка. Правка одного компонента чи стилю не запускає повторну обробку всього застосунку: оновлюється змінений модуль та його прямі залежності.

На практиці це скорочує цикл «зберіг — побачив результат» з кількох секунд до десятих часток секунди, і розробник перестає перемикатися на інші задачі в очікуванні. Саме на таких паузах втрачається концентрація, а разом із нею — темп роботи над задачею.

Другий ефект — час запуску проєкту. Сервер розробки піднімається швидше, тому що компіляція йде за запитом: маршрут збирається в момент першого звернення до нього, а не на старті.

Це помітно на великих кодових базах, де раніше доводилося чекати повної збірки перед першою перевіркою в браузері. Гаряче перезавантаження при цьому залишається стабільним: стан форм і відкритих панелей не скидається, а зміни застосовуються без повного перезавантаження сторінки.

Для замовника це конвертується в терміни та передбачуваність. Швидкий цикл правок означає більше ітерацій перевірки за той самий робочий день, а отже — менше помилок доїжджає до тестування та релізу.

Ми налаштовуємо збирач під структуру конкретного проєкту: правила обробки стилів і статики, кешування залежностей, розділення серверних і клієнтських модулів — щоб прискорення не ламало наявні складальні ланцюжки та не вимагало переписувати код.

Режими збірки Turbopack: порівняння варіантів

Turbopack запускається у трьох сценаріях, і вибір між ними — не питання смаку, а питання того, що саме ви оптимізуєте: швидкість зворотного зв'язку у розробника, час холодного старту продакшн-збірки або сумісність із уже зібраним середовищем.

Нижче — порівняння за реальними критеріями: швидкість старту, підтримка екосистеми та обмеження, які доведеться прийняти.

Режим Коли підходить Обмеження
Розробка Щоденна робота команди, гаряче перезавантаження, швидкий відгук на правки Частина плагінів і нестандартних завантажувачів може вимагати фолбеку на класичний збирач
Продакшн-збірка Фінальна збірка перед викладкою, коли важливі розмір бандла та час холодного старту Не всі оптимізації екосистеми ще перенесені, частина кроків залишається на попередньому збирачі
Гібридний запуск Поступовий перехід: розробка на новому движку, продакшн поки що на старому Подвійна конфігурація, потрібно стежити за розбіжністю поведінки між режимами

Що це дає на практиці

У режимі розробки виграш помітний одразу: сервер піднімається за секунди, а правка в компоненті відображається майже миттєво — цикл «змінив-перевірив» перестає впиратися в очікування.

Продакшн-збірка виграє в холодному старті та розмірі артефактів, але вимагає перевірки, що всі ваші завантажувачі та плагіни підтримуються.

Як вибирати

Гібридний режим — розумний перший крок для проєктів зі складною конфігурацією: ви отримуєте прискорення розробки, не ризикуючи стабільністю викладки. Перехід на новий движок у продакшені роблять після того, як збірка проходить на тестовому середовищі без розбіжностей.

Ми починаємо з інвентаризації конфігурації та плагінів, потім вмикаємо режим розробки, заміряємо час старту та збірки до і після, і тільки потім переносимо продакшн.

Етапи впровадження Turbopack налаштування в проєкт

Впровадження Turbopack налаштування починається не з правки конфігурації, а з аудиту поточного збирання: знімаємо профіль холодного старту та гарячого перезавантаження, фіксуємо час до першого рендеру, обсяг оброблюваних модулів і вузькі місця в ланцюжку завантажувачів. Без цих замірів «до» неможливо довести ефект «після» — а саме на ньому будується приймання.

  1. Аудит збирання. Складаємо карту проєкту: які завантажувачі та плагіни беруть участь в обробці стилів, зображень, шрифтів, які модулі підтягуються транзитивно. Окремо позначаємо все, що працює через нестандартні розширення конфігурації — саме там найчастіше випливають несумісності.
  2. Перевірка сумісності. Звіряємо кожен плагін і завантажувач з актуальною гілкою Turbopack: частина інструментів уже підтримується напряму, частина потребує заміни на вбудовані аналоги, частину доведеться винести в окремий крок. За кожним пунктом фіксуємо рішення — залишаємо, міняємо або відмовляємося.
  3. Міграція конфігурації. Переносимо налаштування поетапно, зберігаючи робочий режим збирання як запасний шлях. Спершу вмикаємо Turbopack для розробки, де виграш найпомітніший, і лише після стабільного результату — для production-збирання.
  4. Тестування збирання. Проганяємо повний набір перевірок: типи, лінтери, модульні та інтегральні тести, збирання всіх точок входу. Порівнюємо метрики із зафіксованими на аудиті — час холодного старту, гарячого перезавантаження, розмір артефактів.
  5. Перевірка крайових сценаріїв. Окремо тестуємо динамічні імпорти, серверні компоненти, роботу зі змінними середовища та пререндеринг сторінок — тут несумісності проявляються найпізніше й найболісніше.
  6. Передача та документація. Описуємо підсумкову конфігурацію, список замінених плагінів і порядок відкату на попередній режим збирання, щоб команда могла повернутися до нього без нас.
  7. Супровід після запуску. Перші релізи ведемо з посиленим контролем метрик збирання, щоб зловити деградацію на реальному навантаженні, а не на тестовому стенді.

Такий порядок закриває головний ризик міграції — приховану несумісність, яка випливає вже в production. Опишіть ваш проєкт — повернемося з оцінкою термінів і планом робіт.

Артефакти та конфігурації, які ви отримуєте

Передаємо не «набір файлів», а робочу конфігурацію збірки з описом, чому кожен параметр виставлений саме так. Інженер вашої команди зможе відкрити будь-який файл, прочитати коментар і зрозуміти логіку — без листування з нами.

  • Конфігурація збірки: файли налаштувань Turbopack з розбором кожного правила — які модулі обробляються, де увімкнено інкрементальний кеш, які шляхи виключені з перезбірки.
  • Схема збірки: діаграма потоку від вихідних кодів до готового бандла — точки входу, межі чанків, порядок обробки ассетів і стилів.
  • Регламент оновлення залежностей: як і коли піднімати версії, що перевіряти перед мержем, які перевірки блокують реліз.
  • Інструкція для розробників: як підняти середовище з нуля, запустити гаряче перезавантаження, читати логи збірки та діагностувати типові помилки.
  • Політика кешування: що і на скільки кешується, як інвалідується при зміні залежностей, як це впливає на час холодної та повторної збірки.
  • Чек-ліст приймання: набір перевірок, за якими ви самі переконуєтесь, що збірка вкладається в цільові показники на вашому залізі та у вашому CI.
  • Документація щодо відкату: покрокове повернення до попередньої конфігурації, якщо нова збірка дає регрес — із зазначенням, які артефакти зберігаються для цього.
  • Карта метрик: які показники збірки та перезавантаження відстежуються, де вони видні та які пороги вважаються нормою.

Усе це живе у вашому репозиторії та оновлюється разом із кодом — не окремим архівом, який застаріває через місяць.

Кейс: прискорення збірки в проєкті на Next.js

Проєкт — маркетплейс з особистим кабінетом, каталогом і адмінкою на Next.js: кілька сотень маршрутів, спільна дизайн-система, десяток розробників у паралельних гілках.

Збірка на класичному компіляторі займала 38 секунд на холодному старті, а гаряче перезавантаження після правки в спільному компоненті розтягувалося до 6-8 секунд.

Інженери перестали запускати повний цикл локально: правили код, чекали на перезавантаження, втрачали контекст — за день набігало більше години простою на людину.

Перевели проєкт на Turbopack в актуальній гілці Next.js і переписали конфігурацію під нього: прибрали кастомні ланцюжки завантажувачів, які дублювали вбудовану обробку, винесли важкі залежності в окремий шар кешу, налаштували інкрементальну перезбірку лише змінених модулів.

Окремо пройшлися по імпортах — точкові замість «парасолькових», щоб дерево залежностей не тягнуло зайві пакети при кожній правці.

Next.js — фреймворк, навколо якого будувався проєкт, і перехід на новий збирач тут дав основний ефект.

Метрика До Після
Холодна збірка 38 с 11 с
Гаряче перезавантаження 6-8 с 0,4-0,8 с
Повний прогін перевірок у CI 9 хв 4 хв
Помилки збірки за спринт 14 3

Швидке перезавантаження повернуло звичку перевіряти зміни одразу, а не «потім у CI». Кількість падінь збірки впала вчетверо — майже всі ловилися локально за секунди, а не на етапі інтеграції.

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

Чим Turbopack відрізняється від інших збирачів?

Turbopack — це збирач, що виріс з тієї самої команди, яка робила Webpack, і його архітектура вирішує головний біль попередника: надлишкову перезбірку.

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

На великому проєкті з сотнями компонентів це різниця між очікуванням у кілька секунд і майже миттєвим відгуком при збереженні файлу.

Ключова відмінність від класичних збирачів — мова реалізації та модель обчислень. Turbopack написаний на Rust і будує роботу як набір ліниво обчислюваних задач: те, що не запитане поточною сторінкою, не збирається взагалі.

Webpack і Vite влаштовані інакше — перший тримає єдиний граф і перераховує його цілком, другий покладається на нативні модулі браузера в режимі розробки, але при збірці переходить у Rollup.

Звідси різні профілі: Vite дуже швидкий на старті, але на великих проєктах із тисячами модулів його перевага в гарячій заміні згладжується.

За сумісністю Turbopack уже покриває основну конфігурацію Next.js — маршрутизацію, серверні компоненти, обробку стилів, статичні ресурси.

Частина нестандартних плагінів і кастомних завантажувачів поки що потребує перемикання на Webpack, тому ми не переводимо проєкт цілком наосліп: спочатку звіряємо список використовуваних розширень збірки з тим, що підтримується, і лише потім змінюємо режим. Такий підхід дає виграш у швидкості розробки без ризику завалити прод-збірку.

На практиці порівняння збирачів зводиться до трьох питань: скільки чекати після правки, наскільки стабільна гаряча заміна на вашому обсязі коду і які частини конфігурації доведеться адаптувати. Ми відповідаємо на них замірами на вашому репозиторії, а не загальними обіцянками.

Часті технічні питання щодо налаштування Turbopack

Turbopack в актуальній гілці Next.js закриває дев-режим, але продакшн-збірку та частину плагінів усе ще доводиться перевіряти окремо — це головне джерело сумнівів під час переходу. Нижче — відповіді на те, що найчастіше виринає на етапі впровадження.

Чи всі плагіни та завантажувачі сумісні з Turbopack?

Ні, покриття неповне. Turbopack реалізує власну обробку модулів, тому частина завантажувачів із webpack-конфігу працює через шар сумісності, а рідкісні плагіни з прямим доступом до внутрішніх хуків компілятора — ні.

На практиці ми спочатку проганяємо інвентаризацію: які завантажувачі реально беруть участь у збірці, які можна замінити нативні, а які потребують тимчасового перемикання на webpack.

Якщо критичний плагін не підтримується, збірка залишається на webpack, а Turbopack вмикається лише для дев-режиму — це робочий компроміс, а не відкат задачі.

Чи можна використовувати Turbopack у продакшн-збірці?

Залежить від версії та складу проєкту. Там, де продакшн-режим уже стабільний, ми вмикаємо його й порівнюємо артефакти з webpack-збіркою за розміром бандла та поведінкою на стенді.

Якщо в проєкті є кастомні плагіни або нестандартні кроки постобробки, продакшн залишаємо на перевіреному компіляторі, а Turbopack тримаємо в розробці — виграш за швидкістю правок там максимальний, а ризиків для релізу немає.

Як відкотити зміни, якщо щось пішло не так?

Перемикання режимів збірки — це прапорець у конфігу, а не міграція даних, тому відкат займає хвилини. Ми тримаємо обидва шляхи збірки робочими: якщо після ввімкнення Turbopack виринає несумісність, повертаємо webpack однією правкою й продовжуємо реліз.

Перед цим фіксуємо базові метрики — час холодного старту, час гарячого перезавантаження, розмір артефактів — щоб було з чим порівнювати й розуміти, що саме дав перехід.

Що з підтримкою після впровадження?

Налаштування Turbopack — не разова правка конфігу: під час оновлення Next.js змінюється поведінка завантажувачів і набір підтримуваних плагінів.

Ми фіксуємо конфігурацію в репозиторії, описуємо, які завантажувачі нативні, а які йдуть через шар сумісності, і перевіряємо збірку на кожному оновленні залежностей. Так перехід не перетворюється на крихке місце, яке ламається за першого ж апгрейду.

Обговоримо ваше завдання щодо прискорення збірки

Щоб повернутися з оцінкою та планом, нам потрібен мінімум контексту: поточна конфігурація збірки, розмір проєкту (кількість сторінок і компонентів), де вузьке місце — холодний старт dev-сервера, перезбірка після правки чи продакшн-збірка. Якщо є логи збірки та заміри часу за етапами — додайте, це одразу знімає половину питань.

Далі робота йде за етапами:

  • Розбираємо поточний конфіг: маршрутизацію, розділення на серверні та клієнтські компоненти, де увімкнені динамічні імпорти, а де їх бракує.
  • Заміряємо базові метрики — час холодного старту, час гарячої перезбірки на типовій правці, час продакшн-збірки. Без цих цифр «прискорення» не перевірити.
  • Визначаємо, що дає основний виграш: переведення збирача на Turbopack, чищення дерева залежностей, винесення важких модулів з клієнтського бандла.
  • Складаємо план міграції з точками відкату — покроково, щоб можна було зупинитися на будь-якому етапі та повернутися до робочої конфігурації.
  • Узгоджуємо обсяг: що робимо в першу ітерацію, що виносимо в другу, які перевірки вважаємо прийманням.

На виході ви отримуєте не «спробували й стало швидше», а конкретику:

  • заміри до і після за кожною метрикою — старт, перезбірка, продакшн-збірка;
  • оновлений конфіг збирача з поясненнями, чому обрано саме такі параметри;
  • список залежностей і модулів, які гальмували збірку, з рішенням щодо кожного;
  • план відкату, якщо щось піде не так на проді;
  • коротку інструкцію для команди — як підтримувати конфіг далі без нас.

Опишіть завдання: що за проєкт, який збирач зараз, де болить найсильніше. Повернемося з оцінкою термінів і планом робіт — з інженером, який буде це вести, а не з менеджером із продажів.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060