从 Rolldown 到 Oxc:前端工具链正在全面 Rust 化
OxcThe Oxidation Compiler是一个用Rust编写的高性能JavaScript和TypeScript工具集合提供了极速的开发体验。无论你是前端开发者还是Rust爱好者这个完整的教程将帮助你在5分钟内快速搭建JavaScript开发环境什么是OxcOxc是一个基于Rust构建的现代化JavaScript工具链包含解析器Parser、格式化器Formatter、代码检查器Linter、转换器Transformer和压缩器Minifier等核心组件。Oxc的设计目标是提供极致性能和开发者友好的体验。Oxc官方文档https://www.oxcjs.com/如果你写过超过10万行的前端项目一定对这种场景不陌生保存代码后编辑器右下角的ESLint图标转个不停CI流水线里静态检查环节占了80%的时间改一行代码热更新要等3秒以上。这些问题的根源很简单我们用JavaScript写的工具已经跟不上JavaScript项目的规模了。直到Oxc出现。先搞清楚Oxc到底是什么很多人说Oxc是“Rust写的ESLint”或者“更快的Prettier”这都太小看它了。Oxc的全称是The Oxidation Compiler氧化编译器因为Rust的吉祥物是螃蟹而氧化就是生锈的过程它不是一个单点工具而是一整套用Rust重写的前端工具链底座。它把前端开发最核心的6件事——解析、lint、格式化、转换、模块解析、压缩——全部重新做了一遍而且每一件都做到了当前最快。更重要的是它不是把这些工具简单地堆在一起而是从架构上让它们共享同一个底层。这才是它能比现有工具快几十上百倍的根本原因。为什么Oxc能快到离谱很多人会说“因为用了Rust”但这只是一半的答案。Biome也是Rust写的但Oxc比它还要快3倍左右。真正拉开差距的是Oxc的架构设计。1. 内存管理把GC彻底踢出编译流程JavaScript写的工具最大的性能瓶颈是什么是垃圾回收GC。ESLint在遍历AST的时候会创建几百万个对象然后又丢弃这会触发频繁的GC把CPU时间都浪费在内存管理上。Oxc用了一种叫**Arena Allocation区域分配**的技术。简单说就是在编译开始前一次性开辟一块大的连续内存所有AST节点都在这块内存里分配编译结束后一次性把整块内存释放。没有了频繁的malloc和free没有了GC停顿内存访问的局部性也大大提升性能自然就上去了。2. 零拷贝解析能不复制就不复制传统的解析器在处理字符串的时候会把每个token都复制一份新的字符串对象。比如解析const name oxc会为const、name、oxc分别创建新的字符串。Oxc的解析器几乎不做任何复制。它所有的token都只是指向原始源代码的一个引用起始位置和长度。整个解析过程除了AST节点本身几乎没有额外的内存分配。这不仅节省了内存更重要的是节省了内存带宽——这在现代CPU上是比计算更宝贵的资源。3. 共享AST一次解析多次使用这是Oxc最核心的架构优势也是它和所有其他工具最大的区别。想想你现在的工具链ESLint会解析一遍代码Prettier会再解析一遍TypeScript编译器又会解析一遍Babel还要再解析一遍。同样的代码被不同的工具重复解析4、5次这是多大的浪费Oxc的设计是解析一次生成一个AST然后所有工具lint、format、transform、minify都共享这个AST。这意味着当你运行oxlint oxfmt的时候代码只会被解析一次。未来当Oxc的工具链完全成熟后你的整个构建流程可能只需要解析一次代码这带来的性能提升是指数级的。现在就能用的工具每一个都能让你爽到Oxc不是一个画饼的项目它的核心工具已经非常成熟完全可以在生产环境使用。Oxlint让ESLint看起来像个古董Oxlint是Oxc生态里最成熟的工具也是目前最快的JavaScript linter。官方数据是比ESLint快50-100倍这不是跑分是真实项目里的实测数据。我自己的一个30万行的React项目ESLint全量检查要跑1分20秒Oxlint只需要1.2秒。更重要的是它的兼容性做得非常好已经实现了700条规则覆盖了ESLint核心和大部分常用插件React、TypeScript、Import、Unicorn等支持ESLint的JS插件你现有的自定义规则几乎不用改提供了自动迁移工具oxlint/migrate能一键把你的.eslintrc转成Oxlint配置支持真正的类型感知lint用的是微软官方的TypeScript Go端口tsgo而不是自己实现的类型系统现在很多大公司已经把ESLint换成了Oxlint包括Elastic、Sentry、PostHog这些明星项目。Oxfmt格式化再也不会卡了Prettier什么都好就是太慢了。格式化一个大文件要等好几秒这在写代码的时候是非常打断思路的。Oxfmt比Prettier快30倍比Biome快3倍。在我的机器上格式化整个项目1000多个文件只需要0.3秒快到你几乎感觉不到它的存在。它的输出和Prettier几乎完全一致官方说已经通过了100%的Prettier JavaScript和TypeScript测试。任何格式化差异都会被当作bug处理。而且它内置了很多Prettier需要插件才能实现的功能导入排序Tailwind CSS类排序package.json字段排序嵌入式格式化CSS-in-JS、GraphQL等替换Prettier几乎不需要改任何配置只要把prettier命令换成oxfmt就行。其他工具正在快速补齐除了lint和formatOxc的其他工具也在快速成熟Parser比SWC快3倍通过了所有Test262 Stage4测试是目前最标准的JS/TS解析器Transformer替代Babel支持TypeScript、JSX转换React Fast Refresh等Resolver比webpack的enhanced-resolve快28倍行为完全一致Minifier还在alpha阶段但已经比Terser快很多未来会成为Rolldown的默认压缩器Oxc的真正野心统一整个前端工具链如果Oxc只是做了更快的ESLint和Prettier那它还不足以被称为“未来的底座”。它真正的目标是成为整个前端生态的基础设施。你可能已经听说过Rolldown——Vite未来的默认打包器。而Rolldown就是完全构建在Oxc之上的。Vite 8已经默认使用Rolldown作为打包器这意味着模块解析用的是oxc-resolver代码转换用的是oxc-transformer代码压缩用的是oxc-minifier也就是说当你升级到Vite 8的时候你已经在不知不觉中使用Oxc了。这只是开始。未来TypeScript编译器、测试运行器、代码分析工具……所有和JS/TS处理相关的工具都可能基于Oxc构建。现在就可以开始用了如果你想体验Oxc带来的速度提升现在就可以动手1. 替换ESLintpnpmadd-Doxlint然后把package.json里的lint脚本改成{scripts:{lint:oxlint,lint:fix:oxlint --fix}}2. 替换Prettierpnpmadd-Doxfmt脚本改成{scripts:{fmt:oxfmt . --write,fmt:check:oxfmt . --check}}就是这么简单。不需要改任何配置不需要学习新的语法你就能获得几十倍的速度提升。最后说几句前端工具链已经停滞太久了。过去十年我们一直在用JavaScript写JavaScript的工具这在项目规模小的时候没问题但当项目达到几十万、几百万行的时候性能瓶颈就变得无法忍受。Oxc的出现不是对现有工具的简单优化而是一次范式转移。它证明了用系统级语言重写前端工具链能带来数量级的性能提升。更重要的是Oxc不是一个孤立的项目它背后有VoidZero公司的支持有尤雨溪团队的背书已经成为Vite官方的技术路线。这意味着它不会像很多开源玩具一样半途而废。如果你还在被缓慢的工具链折磨现在就试试Oxc吧。它不会让你失望的。