React Compiler正式“Rust化”:你项目里的Babel插件,正在被编译进打包器

2026年7月,React团队将React Compiler的Rust移植版本合并进了主仓库。这不是一次普通的性能优化。它意味着你过去在babel-plugin-react-compiler里跑的那层自动memoization,正在从"Babel插件"变成"打包器原生能力"。

更直接的数据是:作为Babel插件的直接替换,Rust版本大约快3倍;独立的转换逻辑在部分场景下最高可达10倍提升。而在Vercel的大规模Next.js应用v0上,当编译器不再作为Babel插件运行、而是直接集成进Turbopack后,编译速度提升了超过40%。

React Compiler没变。变的是它跑在哪一层。

一、先搞清楚:React Compiler到底在做什么

React Compiler的前身是React Forget。它的职责非常单一:自动为组件和Hooks添加缓存优化,让开发者不再需要手写useMemo和useCallback。

过去的运行方式是:它作为一个Babel插件存在。你的打包器------无论是Webpack、Vite还是Turbopack------在构建过程中调用Babel,Babel再加载React Compiler插件,插件分析你的组件代码,插入memoization逻辑。

这条链路能用,但它有一个结构性的成本:Babel本身是一个JavaScript写的编译器,而你的打包器每次构建都要承担Babel的解析和转换开销。

Rust移植要解决的,就是这条链路里的"中间人税"。

二、Rust版快在哪里:不是"翻译了一遍",而是"换了一个位置"

Rust版React Compiler的提速来自两个层面。

第一层:语言层面的原生速度。 Rust编译成机器码直接运行,没有JavaScript解释器开销,也没有JIT预热。移植团队重写了内部实现,使用了arena分配和基于索引的数据结构,所有1,725个测试样例通过,中间状态与TypeScript版本几乎逐字节匹配。作为一个Babel插件的直接替换,Rust版本的运行速度大约快3倍 ,独立转换逻辑在部分场景下最高可达10倍提升。

第二层,也是更关键的一层:位置层面的"去中间人"。 当React Compiler还是一个Babel插件时,打包器每次构建都要先启动Babel,再让Babel加载插件。而Rust版本可以直接集成进打包器本身。Vercel工程师Andrew Imm指出,之前SWC插件路径受到WebAssembly冷启动的拖累;当编译器直接进入Turbopack的Rust管线后,这部分成本被消除了。

在v0上,编译速度提升超过40% 。Next.js官方数据则显示,路由编译速度提升范围为20%到50%,实验性支持随Next.js 16.3推出。

3倍是"换语言"带来的。40%到50%是"换位置"带来的。 后者才是这次移植真正改变游戏规则的地方。

三、生态已经开始动:不只Turbopack,Vite和Rspack也在接

React Compiler的Rust化不是"一个打包器的内部优化"。它正在成为整个Rust工具链的共享基础设施。

Oxlint 已经添加了react/react-compiler规则,早期采用者React Spectrum和Sanity报告了5到6倍的性能提升。

Rolldown (Vite 8的底层打包器)已经合并了暴露React Compiler选项的PR,Vite和Rolldown用户即将可以通过transform.reactCompiler选项启用。

SWC 的PR已经合并并随Rust crate v68.1发布,暴露了jsc.transform.reactCompiler配置项。

Rspack 2.1 通过升级SWC,让builtin:swc-loader支持Rust版React Compiler。

这意味着什么? 以前React Compiler是"React生态里的一个Babel插件"。现在它是"Rust工具链里的一个原生能力"。你用的打包器是Turbopack、Vite、Rspack还是SWC,都能在不同层面接入同一个编译器内核,而不是各自维护一套JavaScript胶水。

四、但社区真正担心的不是速度

Rust移植的消息在Hacker News上引发了另一种讨论。一位读者欢迎向编译型语言迁移,但警告说:"偿还认知债务将会非常痛苦,无论最终哪个团队长期维护这套代码。"

另一位用户则把这件事和Bun的Zig到Rust迁移放在一起比较,提出了一个更根本的问题:"LLM构建出来的基础是否足够可靠,可以在其上继续构建和迭代?还是说,这会导致项目最终变得无法维护,因为没有人真正理解实现细节?"

还有一条评论值得所有"Rust化"项目警惕:"仅仅因为某些东西是用Rust编写的,并不意味着它就是优秀的Rust。" 模型可能会为了满足借用检查器而选择RefCell,把潜在问题推迟到运行时才暴露。

这些担忧不是反对Rust。它们指向的是一个真实的风险:当移植工作大量依赖LLM完成机械性转换,人类工程师主要负责架构设计和代码审查时,代码库的"可理解性"是否跟上了"可运行性" 。

对于React Compiler这种直接修改用户组件语义的编译器来说,"没人看得懂"不是一个学术问题。编译器的一个错误memoization,可能在生产环境表现为一个难以复现的UI bug。

五、这对前端开发者意味着什么?

1. 你的构建配置可能变简单,而不是变复杂

如果你已经在用Next.js 16.3,React Compiler的Rust版是实验性内置的,不需要额外安装Babel插件。如果你用Vite + Rolldown,它正在变成transform层面的一个选项,而不是一个需要单独配置的Babel链路。

编译器正在从"你配置的东西"变成"打包器自带的东西"。

2. "自动memoization"的收益,开始不再被Babel成本吃掉

React Compiler的承诺是"不用手写useMemo和useCallback"。但如果启用它意味着构建时间翻倍,很多团队会犹豫。Rust版把这个成本压到了足够低------3倍到10倍的插件提速,加上集成进Turbopack后的40%以上整体提升。

当memoization的"价格"下降时,更多团队会愿意打开这个开关。

3. Rust工具链的"共享内核"效应正在显现

React Compiler同时出现在Oxlint、Rolldown、SWC、Rspack里,不是巧合。Rust生态正在形成一套可复用的编译器组件,不同的工具通过Rust crate互相组合,而不是各自用JavaScript重写一遍逻辑。

这对开发者的直接影响是:你在一个工具里获得的行为,会更快地在另一个工具里出现。 工具链的碎片化正在被Rust的模块化抵消一部分。

4. 但"Rust化"不等于"无脑升级"

社区对认知债务和LLM生成代码可维护性的担忧是合理的。对于React Compiler这种改变代码语义的工具,建议的采用方式是:

  • 先在非核心页面或新项目上启用,观察memoization行为是否符合预期
  • 保留关闭编译器的回退路径
  • 关注React团队对Rust移植版的长期维护承诺,而不只是短期速度数据

写在最后

2026年7月,React Compiler的Rust移植版本合并进React主仓库。

它作为Babel插件快3倍,独立转换逻辑最高快10倍,集成进Turbopack后带来40%以上的编译提速。Oxlint、Rolldown、SWC、Rspack都在接入同一个Rust内核。

React Compiler没有改变它要做的事。它改变的是自己所在的那一层。 从"Babel生态里的一个插件",变成"Rust工具链里的一个原生能力"。

速度是明面上的收益。结构性的变化是:编译器正在离开插件层,进入打包器的核心管线。 而当一个能力从"可选插件"变成"内置原生"时,它被打开的概率,会远高于被配置的概率。

参考链接:

相关推荐
Lank_M2 分钟前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写4 分钟前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李6 分钟前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易20 分钟前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马31 分钟前
前沿视界
前端
kyriewen35 分钟前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易1 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员
IT_陈寒1 小时前
Vue的这个响应式陷阱,差点让我加班到天亮
前端·人工智能·后端
Flynt2 小时前
别写拖拽行为,只声明"能拖到哪":UIST 最佳论文的拖拽方案我实测了
前端·svg·preact
Moment3 小时前
代码都能让 Agent 写了,我们为什么还要学前端?
前端·后端·面试