格式化一个2MB的JSON文件,Prettier需要1秒多,而JJPWRGEM只要30毫秒。但作者并不满足——他想让这个数字再小一点。

这次优化的起点是数字规范化。Prettier会把科学计数法统一成小写e、去掉正号、删除0指数。JJPWRGEM原本直接用Cow存储数字,不做任何处理。要实现同样的效果,得先把字符串转成数值运算,再写回去。

打开网易新闻 查看精彩图片

作者先试了最直观的做法:每次规范化都新建一个字符串。结果慢得离谱——Cow的设计本意是避免拷贝,但反复分配新内存让优势荡然无存。第二轮优化改用栈上缓冲区,小数字直接原地处理,只有超长数字才走堆分配。第三轮发现大部分规范化其实不改变内容,于是加了短路判断:先检查是否需要修改,不需要就直接返回原引用。

打开网易新闻 查看精彩图片

三轮迭代下来,整体吞吐量从每秒数百MB提升到每秒1.4GB。但真正的惊喜来自最后一步——彻底移除Cow,改用更简单的字符串类型。

Cow是Rust的写时拷贝结构,适合"可能借用可能拥有"的场景。但JSON格式化器的数字处理流程里,这个灵活性成了负担:每次操作都要分支判断是借用还是拥有,缓存局部性也受影响。换成普通字符串后,编译器能生成更紧凑的代码,内存访问模式更可预测。

打开网易新闻 查看精彩图片

最终数字:42%的性能提升。测试文件包括密集浮点数组、大量嵌套对象、深层级字符串结构,覆盖常见JSON形态。作者坦言JJPWRGEM功能还不完整,但这个底子让他确信——追上Prettier的功能,同时保持数量级的速度优势,是可行的。

Oxc正在做原生JSON格式化器,计划年内发布。这场性能竞赛的下一回合,可能比我们想象的更快到来。