Oxfmt Beta:Rust 写的 Prettier 兼容格式化器,到底快了多少

前端
工具
Rust
开源
2026/9/29
·

阅读时间: 大约 9 分钟

Oxfmt Beta:Rust 写的 Prettier 兼容格式化器,到底快了多少

Oxfmt 官方 benchmark 仓库公布的方法论与被测版本

JavaScript 工具链的”Rust 化”已经进行了好几年:SWC 接管了转译,Turbopack 接管了打包,Oxlint 接管了 lint。2026 年 2 月 24 日,OXC 团队(项目负责人 Boshen,核心成员 Dunqing、Yuji Sugiura)宣布 Oxfmt 进入 Beta——这是 OXC 补齐版图的最后一块:代码格式化器。官方的口号很直接:比 Prettier 快 30 倍以上,同时 100% 兼容 Prettier 格式。Vue、Vercel Turborepo、Sentry 等项目已经在用。本文不重复宣传稿,而是回到官方 benchmark 仓库,看看这些数字是怎么测出来的、口径边界在哪里。

一、它的策略:不重新发明格式,只重写引擎

Prettier 之所以难被取代,不是因为它快(恰恰相反,它以慢著称),而是因为它定义了一套事实上的格式标准——团队们为它配好了 .prettierrc、CI 检查、编辑器插件。任何”更好用但格式不同”的格式化器,迁移成本都是全仓库重排一遍 + 团队重新磨合。

Oxfmt 选择了最务实的路线:输出与 Prettier 逐字节兼容。官方称 Beta 版已通过 Prettier 全部 JavaScript 与 TypeScript 一致性测试(conformance tests);对于少数仍不一致的边界情况,OXC 团队称已把问题报给 Prettier 官方并在协作收敛。配套迁移也是一条命令:pnpm oxfmt --migrate prettier 自动转换配置,再跑一次全量重排即可。官方甚至贴心地给了一段”AI 迁移提示词”,让编码助手顺手改 CI、lint-staged、AGENTS.md 里所有提到 prettier 的地方——这说明他们清楚迁移的真正摩擦不在工具本身,而在散落各处的配置引用。

二、30 倍这个数字是怎么来的

官方博客称”无缓存首轮运行下,Oxfmt 比 Prettier 快 30 倍以上、比 Biome 快 3 倍”。这个数字不是孤证,OXC 把整个 benchmark 仓库开源在 oxc-project/bench-formatter,方法论文档化程度相当高:

Oxfmt 官方多文件场景 benchmark 摘要与内存占用

实测环境(官方 README 实读):被测版本为 Prettier 3.9.9、Biome 2.5.14、Oxfmt 0.71.0;每个场景先热身若干轮再正式测量,每轮前 git reset 保证代码库状态一致,内存用 GNU time 测峰值 RSS。两个最有代表性的场景:

场景PrettierBiomeOxfmtOxfmt vs PrettierOxfmt vs Biome
单一大文件(TS 编译器 parser.ts,约 540KB / 1.37 万行)1.731 s117.2 ms61.1 ms28.35 倍1.92 倍
多文件仓库(Outline 仓库,纯 JS/JSX/TS/TSX)15.723 s1.095 s279.3 ms56.30 倍3.92 倍

内存占用同样记录在案:多文件场景下 Prettier 峰值 522.1 MB、Biome 173.9 MB、Oxfmt 146.9 MB。

三、口径偏差:官方没说的那一半

对照官方数字,有几处必须讲清楚,否则就成了软文:

  1. “30 倍”是相对 Prettier 的,不是相对 Biome 的。 单一大文件场景 Oxfmt 只比 Biome 快 1.92 倍——因为 Prettier 本来就慢得离谱(Node.js 单线程 + 无缓存首轮),分母越大倍数越好看。真正同代际的对手是 Biome。
  2. “比 Biome 快 3 倍”同样挑了场景。 这个 3.92 倍来自多文件仓库;单文件场景优势收窄到 1.92 倍。官方博客用的是”3ד约数,实际区间是 1.9–3.9 倍,取决于仓库形态。
  3. 内存并非全面占优。 单大文件场景 Oxfmt 峰值 RSS 为 102.1 MB,反而高于 Biome 的 65.0 MB(只在多文件场景才反超 Biome)。Rust 不等于永远省内存,这个细节官方没在博客首页提,但 benchmark 仓库里白纸黑字。
  4. “100% 兼容”指的是测试套件通过率。 官方原话是”通过 Prettier 的 JS/TS conformance tests 的 100%“,同时承认仍有少量不一致正在和上游对齐——这是测试口径的 100%,不是”全宇宙代码都逐字节一致”的经验保证。
  5. 版本号是 Beta 前夜的快照。 benchmark 跑在 Oxfmt 0.71.0 上,格式化器 Beta 之后版本迭代很快,倍数会随版本波动,别把这组数当永恒结论。

四、除了快,还内置了什么

Beta 相比 Alpha(2025 年 12 月发布)加了几样”Prettier 用户长期要靠插件”的东西:

  • 文件格式覆盖面:JS/JSX/TS/TSX、JSON/JSONC/JSON5、YAML、TOML、HTML、Vue、Angular、CSS/SCSS/Less、Markdown/MDX、GraphQL、Handlebars——一个工具管全仓库;
  • Tailwind 类名排序内置:以前要装 prettier-plugin-tailwindcss,现在开箱即用,JS 与非 JS 文件都支持;
  • Import 排序内置:大小写、副作用导入、分组、组间空行均可配置;
  • package.json 字段排序默认开启;
  • 嵌入式代码格式化:styled-components、styled-jsx、Angular 组件模板里的代码也能格式化。

也就是说,它瞄准的是”Prettier + 一堆插件”的整套组合,而不只是裸格式化本身。

五、客观评价:优势与保留

优势:

  • 迁移成本极低:兼容 Prettier 输出 + 一键迁移命令 + AI 迁移提示,团队不需要重新争论格式;
  • 性能代差明显:即使相对 Biome 也快约 2–4 倍,大型 monorepo 的 lint-staged / CI 等待时间是实打实的下降;
  • 一揽子能力:Tailwind 排序、import 排序不再依赖插件链。

保留意见:

  • 仍是 Beta:官方自己挂着 Beta 标签,生产全量替换前值得在一个仓库里灰度跑一两个迭代;
  • 生态插件生态尚浅:Prettier 十年积累的第三方插件(特殊语言、特殊语法)短期内不可能全内置,冷门插件用户会卡住;
  • “Rust 工具链”本身也要付学习成本:Node 侧的 formatter 生态(编辑器集成、CI 镜像)需要时间跟上。

六、谁该关注

已经被 Prettier 速度折磨、仓库在十万行级以上、又不想放弃 Prettier 格式约定的团队,可以认真评估;尤其是用 Tailwind + 需要 import 排序的项目,等于一次迁移同时卸掉好几个插件。小仓库或格式派极其”原教旨”的团队,等它出 1.0 再动也不迟。

参考来源