Vite 8 背后的秘密:为什么尤雨溪选择了 Oxc

简介: Oxc(The Oxidation Compiler)是用Rust打造的高性能JS/TS工具链,含解析、Lint、格式化、转换、压缩等核心组件。内存零GC、零拷贝解析、共享AST架构,使Oxlint比ESLint快100倍、Oxfmt比Prettier快30倍。已集成Vite 8,5分钟即可升级开发体验!

Oxc(The Oxidation Compiler)是一个用Rust编写的高性能JavaScript和TypeScript工具集合,提供了极速的开发体验。无论你是前端开发者还是Rust爱好者,这个完整的教程将帮助你在5分钟内快速搭建JavaScript开发环境!

什么是Oxc?

Oxc是一个基于Rust构建的现代化JavaScript工具链,包含解析器(Parser)、格式化器(Formatter)、代码检查器(Linter)、转换器(Transformer)和压缩器(Minifier)等核心组件。Oxc的设计目标是提供极致性能和开发者友好的体验。

image

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",会为constnameoxc分别创建新的字符串。

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和format,Oxc的其他工具也在快速成熟:

  • 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. 替换ESLint

pnpm add -D oxlint

然后把package.json里的lint脚本改成:

{
   
  "scripts": {
   
    "lint": "oxlint",
    "lint:fix": "oxlint --fix"
  }
}

2. 替换Prettier

pnpm add -D oxfmt

脚本改成:

{
   
  "scripts": {
   
    "fmt": "oxfmt . --write",
    "fmt:check": "oxfmt . --check"
  }
}

就是这么简单。不需要改任何配置,不需要学习新的语法,你就能获得几十倍的速度提升。

最后说几句

前端工具链已经停滞太久了。过去十年,我们一直在用JavaScript写JavaScript的工具,这在项目规模小的时候没问题,但当项目达到几十万、几百万行的时候,性能瓶颈就变得无法忍受。

Oxc的出现,不是对现有工具的简单优化,而是一次范式转移。它证明了,用系统级语言重写前端工具链,能带来数量级的性能提升。

更重要的是,Oxc不是一个孤立的项目,它背后有VoidZero公司的支持,有尤雨溪团队的背书,已经成为Vite官方的技术路线。这意味着,它不会像很多开源玩具一样半途而废。

如果你还在被缓慢的工具链折磨,现在就试试Oxc吧。它不会让你失望的。

目录
相关文章
|
1天前
|
监控 数据挖掘 测试技术
GPT-5.5 技术观察:企业落地大模型,要先解决“调用层”问题
GPT-5.5 的出现,会让企业 agent 的上限更高。但决定项目能不能上线的,往往不是模型上限,而是调用层、权限、成本和稳定性。
41 0
|
1天前
|
SQL 关系型数据库 MySQL
一张5000万行的表,加索引从45秒到0.02秒——索引设计你真的会吗
本文实测5000万订单表:无索引查询45秒,加索引后仅0.02秒(提升2250倍)。详解索引原理、建索引时机、联合索引最左前缀、覆盖索引及隐式转换陷阱,干货不啰嗦!
|
21天前
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?公共、自定义、共享、云市场、社区5大镜像区别与选择指南
阿里云服务器ECS的镜像选择关乎运维效率与系统稳定性,包含公共、自定义、共享、云市场、社区五大类型。公共镜像由阿里云官方提供,稳定且合规,适合新手;自定义镜像用户可自主创建,便于快速复刻环境,适合中大型企业;共享镜像支持跨账号协作,适合团队项目;云市场镜像预装应用,简化部署,适合快速上线业务;社区镜像由用户分享,适合探索特定需求,但需自行验证安全。用户应根据实际需求合理选择,并重视服务器安全。
212 2
|
15天前
|
Ubuntu 应用服务中间件 Linux
使用阿里云服务器部署网站,保姆级教程(nginx部署及宝塔部署)
本文详解如何在阿里云轻量服务器上部署网站,涵盖两种主流方案:一是手动配置Nginx(含安装、启停、修改配置及静态文件部署);二是使用图形化宝塔面板(一键安装、建站、上传文件与路径配置)。配套Xshell远程连接和Xftp文件管理,适合新手与进阶用户。
|
4月前
|
存储 弹性计算 数据挖掘
阿里云最便宜的元服务器选择:38元、99元、199元购买资格与选择策略参考
目前阿里云推出了多款低价云服务器,包括轻量应用服务器适合轻量级应用,200M带宽,抢购价38元/年;经济型e实例满足中小企业日常应用,3M带宽,优惠价99元/年;通用算力型u1实例则适合高性能需求企业,5M带宽,优惠价199元/年。用户可根据需求、购买资格和预算进行选择,同时,阿里云还提供其他多种规格实例优惠,满足不同阶段业务需求。
|
小程序
微信公众号如何添加插入附件文档,如:word、excel、pdf、zip等文件
在做微信公众号运营时,经常会遇到一个问题,就是发布一些推文时,需要附带附件文档以方法用户下载,Word、Excel、PPT、PDF、TXT、zip、rar、wps等格,打开"快传文档"官网(kuaidoc.cn),或者微信小程序端上传文件,生成可插入公众号推文里的文档链接
1027 0
|
2月前
|
Kubernetes Cloud Native Go
go语言快速入门指南教程
Go语言是Google推出的高性能开源编程语言,语法简洁(仅25个关键字)、编译极快、原生支持高并发(goroutine+channel),兼具C的效率与Python的开发体验。广泛用于云原生(K8s/Docker)、微服务及高并发系统。入门推荐访问golangdev.cn系统学习,再通过GitHub项目实战巩固。
533 9
|
5月前
|
人工智能 uml Perl
Markdown语法大全-Markdown从入门到精通
Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(或者其他格式)。Markdown的语法包括标题、段落、列表、链接、图片、代码等元素的简单标记。 对比我们日常使用的Word文档,Markdown的优势在于,兼容性更强,编辑时无需特定的软件就能打开,与此同时,基于Markdown编辑排版的文档,经过渲染就能一键转为标准的富文本文档,格式不易错乱,整体使用体验更佳。
1762 3
|
2月前
|
缓存 JavaScript 前端开发
Bun.js:四大核心功能 + 性能对比 + 实战教程,新手也能快速上手
Bun.js 是一款高性能、一体化的 JavaScript/TypeScript 工具链,集运行时、包管理器、打包器、测试器于一身,启动快、配置简、兼容 Node.js,支持 TS/JSX 零配置运行。适合新项目、性能敏感型应用及 TypeScript 全栈开发。(239字)
625 1
|
4月前
|
开发框架 资源调度 JavaScript
Svelte无虚拟DOM、极致性能的现代高性能Web开发框架
Svelte是现代Web框架,通过编译时优化将组件转为高效原生JS,无需虚拟DOM。其5.0版引入Runes实现细粒度响应式,体积小、性能高。配套SvelteKit支持SSR与静态生成,生态丰富,中文文档完善,GitHub持续活跃。
395 1