过去十年,前端工具链几乎被 JavaScript 和 Node.js 统治。Webpack、Babel、ESLint——这些我们每天打交道的工具,底层都是 JavaScript。但最近两年,一个意想不到的语言正在悄然改变这一切:Rust。从 SWC 到 Turbopack,从 Rspack 到 Oxc,Rust 编写的前端工具正在以前所未有的性能优势,重新定义”快”的标准。今天我们就来聊聊这场静悄悄的性能革命。

为什么前端工具需要 Rust
JavaScript 是一门优秀的语言,但它有一个天生短板:单线程执行。当你的项目规模增长到数千个模块时,JavaScript 的解释执行模式就成了瓶颈。Webpack 在处理大型项目时的构建时间动辄几十秒甚至几分钟,开发体验令人抓狂。
Rust 的优势恰恰在于此。作为一门系统级语言,Rust 提供了接近 C/C++ 的运行性能,同时通过所有权系统保证了内存安全。更重要的是,Rust 天然支持多线程并行计算——这对于模块编译、代码转换这类可并行化任务来说是巨大的性能提升。
以 SWC(Speedy Web Compiler)为例,这个用 Rust 编写的 JavaScript/TypeScript 编译器,在单核性能上就比 Babel 快 20 倍以上,多核并行后差距更加悬殊。esbuild(虽然是 Go 写的)已经让我们见识到了原生编译的威力,而 Rust 工具链则在更广泛的生态中复制了这种性能飞跃。

Rust 工具链生态全景
目前,Rust 在前端工具链中的渗透已经覆盖了几乎所有关键环节:
编译与转换层:SWC 已经成为 Next.js 的默认编译器,替代了 Babel 的角色。它不仅处理 TypeScript/JSX 转换,还集成了代码压缩和 Polyfill 注入。Deno 也使用 SWC 作为其 TypeScript 编译后端。
打包构建层:这一层的竞争最为激烈。Vercel 的 Turbopack 定位为 Webpack 的继任者,由 Webpack 作者 Tobias Koppers 亲自操刀;字节跳动开源的 Rspack 则打出了”Webpack 的 API 兼容 + Rust 的性能”的组合拳,让现有 Webpack 项目几乎零成本迁移。两者都在追求增量构建的极致性能——首次构建快,热更新更快。
代码分析层:Oxc(Oxidation Compiler)是一个雄心勃勃的项目,试图用 Rust 重写整个 JavaScript 工具链——包括 linter、formatter、parser、resolver 和 minifier。它的 linter 已经在部分场景下比 ESLint 快 50-100 倍。Biome(前身是 Rome)也在类似赛道上发力,提供了 format + lint 的一体化方案。
CSS 处理层:Lightning CSS 用 Rust 重写了 PostCSS 的核心功能,在 CSS 解析、转换和压缩上实现了数量级的性能提升。Tailwind CSS v4 也已将引擎切换到 Rust 实现。
这对开发者意味着什么
性能提升不只是数字上的变化,它从根本上改变了开发体验和工作方式。
首先是开发反馈循环的缩短。当热更新从秒级降到毫秒级时,开发者的注意力不会被打断,”心流”状态得以保持。这种体验差异是质的,不是量的。你不再需要盯着构建进度条发呆,修改一个组件几乎在保存的瞬间就能看到效果。
其次是工具链复杂度的降低。Rust 编写的工具通常是单体二进制文件,不需要 node_modules 里成百上千个依赖包。安装更快,维护更少,安全风险更低。napi-rs 让 Rust 模块可以无缝作为 Node.js 原生扩展使用,对开发者来说调用方式完全不变。
但也有隐忧。JavaScript 工具链的最大优势是可扩展性——你可以写一个 Babel 插件来处理任何自定义语法转换,门槛很低。而 Rust 工具的插件系统要么用 WASM(性能有限制),要么要求你用 Rust 写插件(学习曲线陡峭)。如何在性能和可扩展性之间取得平衡,是这些工具需要持续面对的挑战。

结语
Rust 前端工具链的崛起,本质上是一次”用正确的语言做正确的事”的回归。JavaScript 适合写应用逻辑和快速迭代,而构建工具这类基础设施用系统级语言来写本就是更合理的选择。
作为前端开发者,我们不需要立刻去学 Rust。但需要意识到,脚下的工具地基正在发生位移。今天还在写 Webpack 配置的你,明天可能就在配置 Rspack;还在等 Babel 编译的你,很快就会享受 SWC 的速度红利。保持关注,保持好奇,技术变革从不等待犹豫的人。