Vite 8 против Vite 7: что дал Rolldown на 4000 компонентов

Vite 8 вышел 12 марта 2026 — самое большое архитектурное изменение со времён Vite 2. Вместо двух бандлеров (esbuild для dev, Rollup для прода) один — Rolldown на Rust, а парсинг, трансформации и минификация — через Oxc. Сейчас актуальная версия 8.3. Я собрал синтетическое React-приложение на 1000 и 4000 компонентов (TypeScript, CSS, lodash-es) и прогнал обе мажорные версии на M1 Pro. Все цифры — медиана трёх прогонов, память — пик всего дерева процессов.

Продакшен-сборка — 1000 компонентов: Vite 7 — 2,34 s и 588 MB, Vite 8 — 0,38 s и 402 MB. — 4000 компонентов: Vite 7 — 6,39 s и 1588 MB, Vite 8 — 0,94 s и 1129 MB. Сборка быстрее в 6–7 раз, разрыв растёт с размером проекта. Памяти меньше примерно на 30%. Официальные «10–30× быстрее Rollup» — это про чистый Rolldown на 19 000 модулей; на реальном Vite-проекте с плагином React ждите 5–7×. Бандл у Rolldown чуть крупнее: 4,4 MB против 4,2 MB.

Dev-сервер (4000 компонентов, замер до реального рендера страницы в Chromium) — Старт до первого рендера: Vite 7 — 11,8 s, Vite 8 — 5,9 s. — Полная перезагрузка: 1,81 s против 1,77 s — одинаково. — HMR правки компонента: 155 ms против 143 ms — одинаково. — Память: 1320 MB против 1299 MB. Вывод: в обычном dev-режиме Vite 8 выигрывает только на первой загрузке, потому что Oxc трансформирует модули вдвое быстрее esbuild. Дальше всё упирается в модель «тысячи ESM-модулей по одному запросу», и она не изменилась.

Что меняет модель — experimental.bundledDev (с 8.1): dev-сервер отдаёт один бандл вместо графа модулей. На тех же 4000 компонентах: старт 1,9 s (в 6 раз быстрее Vite 7), reload 0,26 s (в 7 раз), HMR 58 ms. Цена — память 1763 MB, на треть больше. На 1000 компонентов старт 0,75 s против 3,6 s у Vite 7.

Что ещё в Vite 8 — plugin-react 6 делает React Refresh через Oxc, Babel больше не зависимость. В моём замере node_modules Vite 8 даже меньше: 71 MB и 28 пакетов против 75 MB и 73 у Vite 7 с plugin-react 5. — Lightning CSS теперь обычная зависимость (+10 MB), минификация CSS по умолчанию через него. — resolve.tsconfigPaths, server.forwardConsole (консоль браузера в терминал, включается сама при обнаружении coding-агента), emitDecoratorMetadata без плагинов. — Node 20.19+ / 22.12+, ESM-only — как в Vite 7, апгрейд рантайма не нужен.

Миграция Слой совместимости конвертирует esbuild → oxc и rollupOptions → rolldownOptions автоматически, большинство проектов не трогают конфиг. Что реально менять: esbuild.drop → build.rolldownOptions.output.minify.compress, manualChunks в виде объекта удалён — вместо него codeSplitting с группами, build.minify: 'esbuild' требует установить esbuild руками. Плагины на Rollup API работают, Babel-плагины — через @rolldown/plugin-babel. Проверка перед апгрейдом: на Vite 7 заменить vite на rolldown-vite; если сборка и плагины живы, Vite 8 пройдёт без сюрпризов.

Когда переходить — Долгая прод-сборка в CI — переходить сейчас, выигрыш 5–7× на ровном месте. — Медленный старт dev на большом проекте — Vite 8 + bundledDev, но это experimental, SSR-окружения он не трогает. — Небольшой проект без боли — спешить некуда, Vite 7 получает патчи.

Методика и цифры на картинках. Vite 7.3.7 с plugin-react 5.1.4, Vite 8.3.5 с plugin-react 6.2.1, Node 22.12, sourcemap выключен, кэш и dist чистятся перед каждым прогоном.

#frontend #vite #rolldown #react #typescript #buildtools

Vite 8 против Vite 7: что дал Rolldown на 4000 компонентов | Сетка — социальная сеть от hh.ru Vite 8 против Vite 7: что дал Rolldown на 4000 компонентов | Сетка — социальная сеть от hh.ru Vite 8 против Vite 7: что дал Rolldown на 4000 компонентов | Сетка — социальная сеть от hh.ru Vite 8 против Vite 7: что дал Rolldown на 4000 компонентов | Сетка — социальная сеть от hh.ru