写过三年 JavaScript 项目,今天才发现每个工具都在白做解析——Oxc 的共享 AST 把这件事彻底变了

写过三年 JavaScript 项目,每次改一行代码 lint + format + 打包,工具链要跑好几次解析——这不是我的机器慢,是每个工具各自解析了一遍。

这就是 JavaScript 工具链的「重复解析」问题。2026 年,这件事被一个 Rust 项目彻底变了。

根子在一个共享 AST

大多数 JavaScript 工具链是这样的:ESLint 解析一遍生成 AST,Prettier 再解析一遍,Babel 又解析一遍,TypeScript 编译器再解析一遍。同样一段代码,被解析四五次,每次都是重型计算。

Oxc 的做法是:只解析一次,所有工具共用同一个 AST。

Parser、Linter、Formatter、Transformer、Minifier、Resolver——六件套,全部读同一棵树。没有重复解析,没有行为不一致,没有重复计算开销。

这个架构听起来简单,但它是 Rust 才能真正落地的。共享 AST 的前提是内存布局完全一致,而 Rust 的所有权模型让这件事变得自然。JS 工具链里每个工具各自维护自己的 AST,行为微妙地不一致,这是历史包袱,不是技术必然。

六件套现状,2026 年能用到哪一步

Parser 是整个架构的锚点。Oxc Parser 比 SWC 快 3 倍,比 Biome 快 5 倍,背后是内存 arena 分配(bumpalo)+ 短字符串内联 + 并行 scope binding。这个 crate 已经完全生产可用。

Resolver 做模块路径解析,被 Rspack 和 Rolldown 直接调用。Rolldown 是 Rust 写的bundler,用 Oxc 的 resolver 替代了 enhanced-resolve,性能提升 28 倍。

Linter 叫 Oxlint,是目前成熟度最高的组件。430+ 规则,93 条开箱即用不需要配置,Preact / Shopify / ByteDance / Shopee 已经在生产环境跑着。4800 个文件的代码库,0.7 秒跑完。

Formatter 叫 Oxfmt,beta 阶段,目标是 Prettier 100% 兼容。速度是 Prettier 的 30 倍,Prettier 自己的 bug 被 Oxfmt 在兼容测试中发现了 7 个并提交修复了。

Transformer 处理 TS / JSX / modern JS 降级,是 Rolldown 的内部依赖。Oxc Transform 的输出直接喂给 Rolldown,打包时不需要再过一次 Babel。

Minifier 对标 Terser,压缩质量相当,性能接近原生。生产环境里 Minifier 不是瓶颈,真正的瓶颈是重复解析,共享 AST 之后这块已经省掉了。

为什么 Cloudflare 要买 VoidZero

2026 年 6 月,Cloudflare 收购了 VoidZero。Evan You 出来解释了原因:

AI 编程爆发之后,Vite 成了 AI Agent 生成应用的第一站。每周 1.29 亿次下载,AI Agent 发 PR 的速度远超人类,靠的是这套工具链跑得快。

Cloudflare 的目标是把 Vite 工作流和 Workers / D1 / R2 / KV / Agents 能力直接连起来,让 AI 从写代码到全球部署无缝衔接。VoidZero 的团队全部加入,保持 MIT 开源,Cloudflare 另投了 100 万美元维护者基金。

这笔收购说明了一件实事:前端工具链不再是「配置繁琐的负担」,而是 AI 时代开发入口的基础设施。共享 AST、一次解析所有工具复用,这件事只有 Rust 的内存布局和并发模型才能高效实现。

下一步

如果你的团队还在用 ESLint + Prettier + Babel 分开跑,先试一下 Oxlint,不需要改配置,直接跑:

“`bash
npx oxlint@latest
“`

如果你的项目用 Vite 8,默认已经在用 Rolldown + Oxc 了。

其他五个工具按需渐进接入:Resolver 可以直接替代 enhanced-resolve,Transformer 是 Rolldown 已经替你跑着的,Minifier 等正式版,Formatter 关注兼容性进展。

这件事的本质是:前端工具链的性能问题,不在算法,在架构。共享 AST 把「各自解析」变成了「一次解析、六次复用」,Rust 的内存模型让这件事第一次真正高效地跑起来了。

评论区

0 条评论

登录后可评论。

铁锈·Rust工具链 28 阅读