查询编译器项目通过将传统的 Rust 引擎替换为基于 WASM 模块和 TypeScript 构建的更精简解决方案来升级 Prisma ORM。这一更改提升了查询性能,将包大小减少了 85-90%,同时还改善了与各种 Web 框架和打包工具的兼容性。随着 Prisma ORM 迈向版本 7,开发人员可以期待更流畅、更高效的体验。
TL;DR:无 Rust ORM 已可用于生产
Prisma ORM 的核心引擎已从基于 Rust 的查询引擎大幅转向更精简的TypeScript/WASM 核心(查询编译器)。这种新架构现已可用于生产 (v6.16+),从根本上改善了您的开发者体验 (DX) 和应用程序性能。
- 无二进制开销:消除了对原生 Rust 二进制文件的依赖,极大地简化了部署并降低了潜在的复杂性问题。
- 性能:查询速度最高提升 3.4 倍(通过消除跨语言序列化),捆绑包大小减少 90%(从约 14MB 减至 1.6 MB)。
- 更好地支持不同运行时:更好地支持 Cloudflare Workers、Deno、Bun、Vercel Edge 等部署环境和运行时。
要立即实现这些优势,请参阅新无 Rust ORM 的官方使用指南。您也可以在我们Prisma ORM:Rust 到 TypeScript 完整迁移之旅的博客系列中跟踪整个开发和发布历史。
打破性能障碍
快速回顾一下,查询编译器项目是我们将用 Rust 编写的 Prisma 查询引擎替换为精简的 WASM 模块和补充 TypeScript 代码的努力。通过此举,我们期望实现更快的查询和更小的占用空间,现在我们已经运行了基准测试来证明这一点。
自上次更新以来,我们的团队一直专注于这个项目。随着 Prisma ORM 6.4 的发布,我们达到了一个重要的里程碑:查询编译器的一个可工作的概念验证。这个 Alpha 版本包含了运行针对我们现有 Prisma Client 实现的全面基准测试所需的 API。您可以在我们的 ORM 基准测试仓库中查看代码和完整的基准测试结果。
Prisma Client 的新架构
采用查询编译器的 Prisma Client 架构建立在我们当前用于驱动适配器的架构之上。在当前的驱动适配器实现中,Prisma Client 查询从 TypeScript 发送,通过查询引擎、驱动适配器和数据库驱动,然后最终到达您的数据库。

使用查询编译器,Prisma Client 查询首先被翻译成内部查询计划,然后传回客户端,通过相同的驱动适配器和数据库驱动设置发送到您的数据库。如果您今天正在使用 driverAdapters 预览功能,新的实现将非常相似。

这种转变不仅仅是为了现代化;更是为了让 Prisma ORM 更快、更简单。我们相信新的架构将显著减少“陷阱”,让开发人员能够将 Prisma ORM 集成到他们的技术栈中,而无需担心兼容性问题。
新架构的主要优势
更快的性能
这个项目的主要驱动力是,虽然 Rust 速度很快,但 Rust 和 TypeScript 之间序列化数据的成本非常高。这种成本抵消了我们将查询引擎放在 Rust 中所获得的任何好处,并且我们已经通过新架构看到了显著的改进。
不再需要额外的二进制文件
通过移除对 Rust 二进制文件的依赖,我们消除了一整类由于在开发流程中管理额外文件而导致的问题。从严格的网络无法安装二进制文件的简单问题,到确保生产和开发环境具有正确文件的复杂问题,这些问题在查询编译器项目中都不存在。
最重要的是,移除二进制文件意味着如果您的环境可以运行 JavaScript,它就可以运行 Prisma ORM。我们预计 AWS Lambda 或 Cloudflare Workers 等环境的最大痛点将得到解决。您的 Prisma Client 现在将自然地融入您的应用栈。
显著减小的包大小
我们初步测试表明,基于 Rust 的 Prisma 查询引擎大约有 14 MB(gzip 压缩后 7 MB),而新的查询编译器仅约 1.6 MB(gzip 压缩后 600 KB),平均大小减少了 85-90%。更少的磁盘空间意味着您的部署更快,并且您的应用程序可以更容易地部署到更多平台。
基准测试结果
数字不言自明。与现有的 Rust 查询引擎相比,新的查询编译器 (QC) 架构带来的性能提升随着检索数据量的增加而逐渐变好。它在最关键的时候表现更快。
从我们的测试中我们发现,在处理大量数据时,查询编译器始终比基于 Rust 的引擎更快,在某些情况下甚至快三到四倍。当只返回少量数据时,两种实现都表现得基本相同。查询编译器为现有 Prisma ORM 用户带来了巨大的好处,而没有缺点。
然而,这些示例只是初步的基准测试。我们计划扩展这些基准测试,并在受限环境(如 AWS Lambda 或 Cloudflare Workers)中运行它们,以便我们对数据充满信心。此外,我们将继续改进我们的实现,以提高效率和带来更多好处。
拥抱未来:Prisma ORM 7 及更高版本
我们对这给 Prisma ORM 用户带来的意义感到非常兴奋。突破性的性能和减小的包大小不仅使您的应用程序更快、更高效,也使我们能够更快地创新。在接下来的几个月里,从预览版开始,我们将邀请您尝试这些改进。此后不久,Prisma ORM 7 将完全采用查询编译器,标志着 Prisma 与数据库通信方式进入新时代。
一如既往,我们的重点是我们的社区,我们很乐意听取您的想法!
- 关注最新更新并在 GitHub 上加入讨论
- 在我们的开发者 AMA 中,在 Discord 上向我们提出紧迫问题
- 甚至可以自己运行基准测试!
常见问题 (FAQ)
Prisma ORM 的无 Rust 二进制版本自Prisma ORM 6.16 版本起已可用于生产,以下是我们用户的一些常见问题:
没有 Rust 引擎,Prisma 的包大小缩小了多少,为什么这有助于冷启动?
当 Prisma 移除 Rust 二进制查询引擎后,包大小从大约14 MB(gzip 压缩后 7 MB)降至大约1.6 MB(gzip 压缩后 600 KB),减少了85% 到 90%。
这个更小的包在无服务器和边缘环境中加载更快,例如 AWS Lambda、Cloudflare Workers 和 Vercel Edge Functions。
由于需要加载和初始化的代码更少,冷启动变得更快,内存使用也减少了。
与旧的 Rust 引擎相比,使用无 Rust 二进制的 Prisma ORM 查询速度有多快?
在内部基准测试中,无 Rust 二进制的 Prisma ORM,也称为查询编译器,带来了显著的性能提升:
- 包含 25,000 条记录的
findMany从185 毫秒提升到 55 毫秒(约快 3.4 倍) - take = 2000 的
findMany从6.6 毫秒提升到 3.1 毫秒(约快 2.1 倍) - 复杂连接从207 毫秒提升到 130 毫秒(约快 1.6 倍)
您可以在Rust 到 TypeScript 性能更新博客中阅读更多信息。
这些改进在大型或复杂查询上最为显著。
无 Rust 二进制的 Prisma ORM 能在 Cloudflare、Deno 和 Bun 等运行时中工作吗?
是的。由于 Prisma 的新引擎完全在 TypeScript 和 WebAssembly 中运行,它不再依赖于原生二进制文件。
您现在可以在支持 JavaScript 或 WASM 的环境中(例如 Cloudflare Workers、Bun 和 Deno)使用 Prisma。
要启用它,请使用新的 prisma-client 生成器并为您的数据库配置正确的驱动适配器,例如 PostgreSQL 的 @prisma/adapter-pg。
有关设置说明,请参阅Prisma 客户端生成器文档。
如果 Rust 已经很快了,为什么切换到 TypeScript 和 WebAssembly 会让 Prisma 更快?
Rust 是一种非常快的系统语言,但在旧的架构中,Prisma 必须在 Rust 和 JavaScript 之间序列化和反序列化数据。
这种跨语言通信增加了开销,特别是对于大型查询。
新的查询编译器在 TypeScript 和 WebAssembly 中运行,这消除了对序列化步骤的需求,从而实现了更快的查询执行。
您可以在从 Rust 到 TypeScript:Prisma ORM 的新篇章中了解更多关于这一变化的信息。
使用无 Rust 二进制的 Prisma ORM 需要进行哪些更改?
要迁移到新版本,请执行以下操作:
- 使用新的
prisma-client生成器,并在您的schema.prisma文件中设置engineType = "client"。 - 删除
binaryTargets配置(不再需要)。 - 安装适用于您数据库的相应驱动程序适配器,例如 PostgreSQL 的
@prisma/adapter-pg或 SQLite 的@prisma/adapter-sqlite。 - 运行
npx prisma generate以重新生成您的 Prisma Client。
您可以在无 Rust 二进制 ORM 的 Prisma 文档中查看完整的使用指南。
如果需要,我可以切换回 Rust 引擎吗?
是的。如果您遇到兼容性问题,可以通过使用 6.16.0 之前的旧 Prisma ORM 版本来暂时恢复到旧版 Rust 引擎。
但是,无 Rust 二进制引擎现在是默认设置,并且建议所有新项目都使用它。
迁移步骤和回退指南可在无 Rust 的 Prisma ORM 生产发布博客中找到
不要错过下一篇文章!
订阅 Prisma 新闻通讯