Vite получил нативный Rust-компилятор React, компиляция ускорилась в 17 раз

Vite получил нативный Rust-компилятор React, компиляция ускорилась в 17 раз

4 августа 2026 года команда oxc выпустила официальную поддержку React Compiler на Rust, быструю альтернативу прежней реализации на Babel. Автор блога перевёл на неё кодовую базу сайтостроителя Outlyne (React Router, 1036 файлов) и раскрыл цифры. Версия 6.1.0 плагина @vitejs/plugin-react добавила «экспериментальную поддержку нативного React Compiler»: включается опцией compiler: true в конфиге Vite. Для тех, кто не пользуется этим официальным плагином, например, для React Router в режиме framework, есть отдельный минимальный плагин @acusti/vite-plugin-react-compiler, который компилирует код независимо от остального пайплайна сборки.

Главный результат, скорость: компиляция 1036 файлов сократилась с 14,3 секунды на Babel до 0,81 секунды на нативном компиляторе в однопоточном режиме, более чем в 17 раз. Boshen, технический руководитель oxc, говорил о более чем десятикратном ускорении относительно Babel по предварительным замерам самой команды oxc. Автор подчёркивает: ускорение относится только к этапу компиляции, а не ко всей сборке, в его проекте общее время сборки сократилось скромнее, с 22,1 до 9,3 секунды, то есть примерно в 2,4 раза.

Помимо скорости, новая версия компилятора устранила ряд ограничений, которые были в версии 1.0 на Babel: теперь поддерживается любая условная логика внутри блоков try/catch, переприсваивание деструктурированного пропса компонента с последующим использованием во вложенном замыкании, а также вычисляемые ключи объектных свойств. Эти исправления добавили в приложении автора поддержку ещё семи функций: пяти, благодаря исправлению для try/catch, двух, благодаря вычисляемым ключам объектов. При этом два паттерна по-прежнему заставляют компилятор пропускать компонент или хук без компиляции: throw внутри блока try и операторы логического присваивания (??=, &&=, ||=).

Автор отмечает и побочный плюс: теперь линтер (Oxlint) и сборщик используют одну и ту же версию React Compiler с одинаковым набором возможностей, тогда как раньше рассинхронизация версий пакета oxc-transform-react между линтером и сборкой приводила к путанице, компонент не оптимизировался при сборке, но линтер на это не жаловался.

Практический переход описан для двух сценариев. На Vite v8+ с официальным плагином достаточно установить пакет oxc-transform-react, включить compiler: true в конфиге react() и убрать из конфигурации Babel-плагин @rolldown/plugin-babel. Для React Router в режиме framework нужно поставить @acusti/vite-plugin-react-compiler и удалить vite-plugin-babel, babel-plugin-react-compiler и @babel/preset-typescript, конфиг Vite при этом заметно упрощается.

Ключевые факты

  • Плагин @vitejs/plugin-react версии 6.1.0 добавил экспериментальную нативную поддержку Rust-реализации React Compiler от команды oxc (официальный релиз, 4 августа 2026 года)
  • На кодовой базе из 1036 файлов React Router компиляция ускорилась с 14,3 до 0,81 секунды (однопоточно), более чем в 17 раз; при этом вся сборка ускорилась лишь в 2,4 раза (с 22,1 до 9,3 секунды)
  • Boshen, технический руководитель oxc, заявляет о более чем десятикратном ускорении относительно Babel по предварительным замерам команды
  • Новая версия компилятора закрыла ограничения на условную логику в try/catch и на переприсваивание деструктурированных пропсов, добавив автору поддержку ещё семи функций в приложении
  • Компилятор всё ещё пропускает без компиляции компоненты с throw внутри try и с операторами логического присваивания (??=, &&=, ||=); для React Router framework mode нужен отдельный плагин @acusti/vite-plugin-react-compiler

Почему это важно

React Compiler, официальный инструмент автоматической оптимизации компонентов React, до сих пор работавший через медленную Babel-реализацию. Команда oxc выпустила его нативную Rust-версию, и Vite первым из основных сборщиков встроил её напрямую в свой официальный плагин, без промежуточного слоя Babel. Это снимает узкое место, которое раньше замедляло сборку React-проектов на каждом изменении кода.

Кому это важно

В первую очередь, командам с крупными React-кодовыми базами и активным CI/CD, где время сборки напрямую превращается в счета за минуты GitHub Actions и в задержки между коммитом и деплоем. Также важно тем, кто уже использует React Router в режиме framework, для них есть отдельный совместимый плагин, а не только официальный @vitejs/plugin-react.

Как это применить

На Vite v8+ с официальным плагином: установить пакет oxc-transform-react, передать { compiler: true } в react() внутри конфига Vite и убрать из зависимостей @rolldown/plugin-babel. Если проект использует React Router в режиме framework (а не сам плагин @vitejs/plugin-react): поставить @acusti/vite-plugin-react-compiler, добавить его в список плагинов рядом с reactRouter() и удалить vite-plugin-babel, babel-plugin-react-compiler и @babel/preset-typescript, конфигурация в обоих случаях становится короче.

Можно ли доверять

Пост написан автором пакета @acusti/vite-plugin-react-compiler, то есть человеком, заинтересованным в успехе перехода, но цифры даны с конкретной методикой измерения (однопоточный прогон, точные секунды до и после) и подтверждены отдельной цитатой Boshen, технического руководителя проекта oxc, о собственных предварительных замерах команды. Источник не называет ни автора статьи по имени, ни характеристики железа, на котором получены цифры, ни дату, когда сама Outlyne перешла на новый компилятор.

Риски и подводные камни

Заявленное ускорение в 17 раз касается только этапа компиляции, а не сборки целиком: в реальном проекте автора общее время сборки сократилось скромнее, в 2,4 раза. Поддержка в @vitejs/plugin-react пока помечена как экспериментальная, а компилятор всё ещё не умеет обрабатывать throw внутри try-блока и операторы логического присваивания (??=, &&=, ||=), такие компоненты и хуки он молча пропускает, не оптимизируя, но и не выдавая ошибку.

«Это более чем в 10 раз быстрее, чем Babel, по нашим предварительным замерам.»

— Boshen, технический руководитель проекта oxc