由 Colin McDonnell 创建、以 TypeScript 为核心的 Schema 验证库 Zod,于 2026 年 8 月 28 日发布了 Zod 4.5,引入 Schema 编译,将 Schema 内存占用降低近一个数量级,并加入了一批开发者期待已久的辅助功能。Zod 4.6 随后于 9 月 9 日发布,在此基础上进一步扩展功能,并修复了递归 Schema 的内存回归问题。编译和内存占用方面的主要变化出现在 4.5,因此本文仍以该版本为重点,但现在升级的开发者也需要考虑后续发布的 4.6。
最重要的新功能是 z.compile(),它可以将任意 Schema 转换为预编译验证器,以三至九倍的速度解析相同数据。编译后的 Schema 与原始 Schema 行为完全一致,不需要遵循任何特殊规则。更重要的是,正如 McDonnell 所解释的,编译在进程内完成,而不是在构建时完成,因此不需要额外配置打包器插件或代码生成步骤。
希望将编译应用于所有 Schema 的团队,可以在入口文件顶部添加 import "zod/compile",或者运行 node --import zod/compile app.js。此后,每个 Schema 都会在首次解析数据时进行延迟编译。
通过缓存绑定方法,而不是为每个实例分别分配方法,一个空的 z.string() 现在只会保留 784 字节堆内存,而此前需要 7.5KB,内存占用大约降至原来的九分之一。safeParse() 在验证失败时也不再捕获堆栈跟踪,使拒绝无效输入的成本降低约 7.5 倍。除性能提升外,4.5 还恢复了 z.deepPartial(),并新增 .exactPartial()、z.creditCard()、z.input()/z.output()、递归 Schema 中的循环数据支持,以及八种新的错误信息语言区域。
与此最直接相关的 4.6 新功能是 .validate()。它只返回布尔值,不会构建解析结果或 ZodError,并且可以在发现第一个问题时停止验证。启用编译后,官方数据显示,在处理无效输入时,它的性能最高可达到 .safeParse().success 的 35 倍。这并不代表通用解析性能提升了 35 倍;当开发者需要转换后的输出或详细错误信息时,它也不能替代现有方法。
4.6 还增加了对类实例属性的验证、z.fromJSONSchema() 中的六个额外验证关键字,以及 z.iban()。对于内容安全策略禁止使用 z.compile() 所依赖的 new Function 的环境,开发者可以使用 z.withParser() 安装外部生成的解析器,但该方法本身不会生成解析器。
更重要的是,4.6 修复了 4.5 中的一项回归问题。该问题会让递归 Schema 持续持有已经解析的数据,并可能导致内存耗尽。
开发者 Mehul Mohan 将对象和数组上约十倍的性能提升称为“一次真正的性能突破”。
在该版本引用的 Moltar parseSafe 基准测试中,编译后的 Zod 达到每秒 4750 万次操作,略微领先每秒 4530 万次的 Typia,并将 Valibot(每秒 180 万次)和 ArkType(每秒 15.2 万次)远远甩在身后。考虑到 ArkType 长期以来一直宣传其性能比 Zod 快许多倍,这一结果尤其引人关注。不过,在随 4.5 发布的纯布尔断言基准测试中,Typia 和 ArkType 仍领先于编译后的 Zod。这些数字只是该版本发布时的性能快照,并不是针对 4.6 新增 .validate() 路径进行的最新对比;最快的选择仍然取决于具体工作负载。

Moltarbench 测试结果,来自版本发布文章。
Zod 是一个开源、以 TypeScript 为核心的验证库,用于定义 Schema,并在完整推断静态类型的同时解析不可信数据。它是 JavaScript 生态中采用范围最广的验证工具之一,获得了 tRPC、React Hook Form 和许多后端框架的一等支持,目前每周下载量已超过 3000 万次。
原文链接:





