Zod 4.5 在 8 月 28 日发布,作者 Colin McDonnell 这次带来的不是小修小补。一个裸的 z.string(),现在只占 784 字节堆内存,而此前是 7.5kb——差不多九倍的缩减。
![]()
做法是把绑定方法做记忆化,不再为每个实例单独分配。同一版里,safeParse() 在失败时跳过了堆栈捕获,无效输入的拒绝成本降到原来的约七分之一。速度之外,4.5 还恢复了 z.deepPartial(),新增 .exactPartial()、z.creditCard()、z.input() 与 z.output()、递归 schema 的循环数据支持,以及八种新的错误语言包。
旗舰功能是 z.compile()。它把任意 schema 变成一个预编译校验器,解析同一份数据的速度提升三到九倍。编译后的 schema 行为与原始版本完全一致,没有额外规则要记。McDonnell 特别强调,编译发生在进程内,而不是构建时——不需要接打包插件,也不需要代码生成步骤。
想让所有 schema 都吃上这个优化,可以在入口文件顶部加一行 import "zod/compile",或者用 node --import zod/compile app.js 启动。之后每个 schema 会在第一次解析数据时被惰性编译。
4.6 在 9 月 9 日跟进,延续了这条线,并修掉一个递归 schema 的内存回归。升级的人需要把两个版本一起考虑,但编译和内存这两项大改动都落在 4.5。
4.6 里最直接相关的新增是 .validate():一个只返回布尔值的检查,不构造解析结果,也不构造 ZodError,遇到第一个问题就能停下。开启编译后,该版本报告在无效输入上相比 .safeParse().success 最多有 35 倍的提升。需要说清楚的是,这不是通用的解析提速,也不能在需要转换后输出或错误详情时替代原有路径。
4.6 还加了类实例上的属性校验、z.fromJSONSchema() 的六个新校验关键字,以及 z.iban()。如果所在环境的内容安全策略(CSP)拦截了 z.compile() 用到的 new Function,可以用 z.withParser() 装一个外部生成的解析器——它本身不负责生成那个解析器。
开发者 Mehul Mohan 把对象和数组上约十倍的提升称为"一次真正的性能胜利"。
发布文章引用的 Moltar parseSafe 基准里,编译后的 Zod 达到 47.5M ops/sec,略高于 Typia 的 45.3M,把 Valibot(1.8M)和 ArkType(152k)甩在身后。这个结果有点意思,因为 ArkType 长期把自己宣传成比 Zod 快很多倍。不过在 4.5 同期发布的布尔断言基准上,领先的是 Typia 和 ArkType,编译后的 Zod 并不占优。
这些数字是那一版发布时的快照,不是针对 4.6 新增 .validate() 路径的重新对比。最快的选项仍然取决于具体负载。
Zod 是一个开源、TypeScript 优先的校验库,用来定义 schema、解析不可信数据,并完整推断静态类型。它是 JavaScript 生态里采用最广的校验工具之一,在 tRPC、React Hook Form 和许多后端框架里都有一等支持,目前每周下载量超过 3000 万。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.