Перевод твита Justin Schroeder (создателя formkit.com) о Rolldown. Встречаемые в тексте ссылки с `@` являются ссылками на аккаунты в Twitter/X
Rolldown - новый проект создателя
Vue
иVite
Evan You по переписыванию части Rollup на Rust для увеличения производительности сборки JavaScript приложений.
Rolldown
может стать самым важным веб-проектом ближайших 5-10 лет. Я подумал, что будет полезно объяснить, почему:
Текущая ситуация
Rollup - это лучший и наиболее полный сборщик на сегодняшний день. Он опередил свое время, став первопроходцем в таких ключевых концепциях, как tree shaking (? @Rich_Harris& @lukastaegert), и до сих пор ему нет равных в этом отношении. Когда Evan You представил @vite_js, Rollup был краеугольным камнем процесса сборки. Плагины Vite - это (по большей части) плагины Rollup.
Прошло совсем немного времени, и Vite стал стандартной средой разработки и сборки почти для каждого крупного мета-фреймворка: @nuxt_js, @solid_js start, @sveltejs kit, @remix_run, @angular cli и т.д. (в основном все, кроме Next). Rollup по-прежнему лежит в основе всего этого. Он прошел путь от способа собрать библиотеку перед публикацией на npm до основ того, на чем строится современный веб.
Проблема
Мы находимся в мире, где Rollup используется для создания почти каждого байта в Интернете - то, для чего он изначально не предназначался - и его производительность (на самом деле производительность JavaScript) может быть улучшена. esbuild
(? @evanwallace), написанный на Go, показал миру, насколько быстрее может быть нативный бандлер, но esbuild не был совместим с Rollup и имел свою долю недостатков (отсутствие поддержки TypeScript, ограниченный tree shaking и т. д.).
@vite_js использует esbuild и Rollup, чтобы получить лучшее из двух миров, но здесь кроется другая проблема: парсинг. Разные инструменты сборки используют разные AST-деревья, и каждый из них должен разобрать код, чтобы получить AST. Кроме того, многие плагины для Rollup/Vite выполняют свой собственный парсинг. Разве не было бы классно, если бы парсинг выполнялся за один раз и единое дерево AST могло бы использоваться всеми уровнями стека сборки?
Evan You недавно сказал. @vite_js часто приходится разбирать один и тот же TS-файл не менее 5 раз на разных уровнях стека. Очевидно, что это может быть лучше.
Решение
@rolldown_rs пытается (в конечном итоге) решить все эти проблемы. Во-первых, он написан на Rust, одном из самых быстрых языков - в целом даже быстрее, чем Go (т.е. esbuild), благодаря тому, что Rust не использует сборку мусора. В некоторых приложениях это не имеет большого значения, но в контексте парсинга и компиляции это огромное преимущество (ирония в том, что Rust сам по себе является самым медленным компилятором в мире ?).
Однако Rolldown не просто пытается быть быстрым, он также пытается быть совместимым по API с Rollup. Это будет грандиозным достижением (API Rollup не для слабонервных). Если это удастся, то @vite_js команда сможет поменять двигатель внутри Vite во время полета самолета, и мы ничего не заметим, разве что прибудем в пункт назначения гораздо раньше.
Наконец - и, возможно, самое амбициозное - единичный парсинг. Возможно, до этого еще далеко, но поскольку Vite так распространен и поскольку Rolldown использует OXC (? @boshen_c) для парсинга, мы можем оказаться в мире, который стандартизируется вокруг единого дерева разбора и AST. Улучшение производительности среды разработки и времени сборки будет огромным.
В случае успеха Rolldown будет отвечать за преобразование почти каждого байта веб-кода - независимо от того, какой фреймворк вы используете (с удовольствием поделюсь своими мыслями о том, что это значит для Next, как-нибудь в другой раз).
Спасибо
Наконец, спасибо @vite_js и всем, кто работает над @rolldown!
P.S. Я никак не связан с этими прекрасными инженерами, я всего лишь простой плебс, строящий на спинах этих гигантов.
Наш Telegram-канал о Vue и фронтенд-разработке в целом: @vuefaq
Вебсайт: Vue‑FAQ.org.