V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moment082
V2EX  ›  程序员

Prisma 7 重磅发布:告别 Rust,拥抱 TypeScript,性能提升 3 倍

  •  
  •   moment082 · 10 小时 1 分钟前 · 2092 次点击

    最近在使用 NestJs 和 NextJs 在做一个协同文档 DocFlow,如果感兴趣,欢迎 star ,有任何疑问,欢迎加我微信进行咨询 yunmz777

    2025 年 11 月 19 日,Prisma 团队正式发布了 Prisma ORM 和 Prisma Postgres 的最新版本——Prisma 7 。在过去的一年中,Prisma 团队始终将开发者体验放在首位,致力于让使用 Prisma 构建应用程序变得更加简单、高效。无论开发者使用何种开发工具,或选择在哪个平台部署,Prisma 7 都将带来卓越的开发体验。

    为未来而设计

    愿景与承诺

    2024 年 12 月,Prisma 团队发布了 Prisma ORM 的未来发展路线图,详细阐述了他们的愿景以及实现这些目标的计划。这不仅仅是一份产品规划文档,更是 Prisma 团队对 Prisma ORM 未来发展的明确承诺,以及他们如何持续支持开发者社区的坚定决心。

    与此同时,Prisma 团队还推出了自己的托管 Postgres 服务——Prisma Postgres 。这款产品以简洁性和高性能为核心设计理念,旨在为开发者提供一个开箱即用的数据库解决方案,让开发者能够享受到与 Prisma ORM 同样出色的开发者体验。

    随着 ORM 路线图的发布和 Prisma Postgres 的推出,Prisma 团队为构建下一代工具奠定了坚实的基础。市场反馈超出了他们的预期:ORM 的市场份额和使用量实现了显著增长,而 Prisma Postgres 在个人项目和商业应用中的采用率也令人瞩目。

    重大技术突破

    从 Rust 到 TypeScript:一次大胆的架构转型

    在 Prisma 6.0.0 发布时,Prisma 团队承诺将带来更好的性能、更强的灵活性以及更完善的类型安全性。为了实现这些目标,他们需要做出一些根本性的改变。

    为什么选择离开 Rust ?

    Prisma 团队做出了一个看似反直觉的决定:将 Prisma Client 从 Rust 迁移到 TypeScript 。对于许多人来说,这可能是一个令人困惑的选择,毕竟 Rust 以其卓越的性能而闻名。但在 Prisma 的场景下,性能只是故事的一部分。

    使用 Rust 构建客户端的一个显著副作用是,它限制了社区贡献者的参与门槛。如果开发者没有深厚的 Rust 开发经验,想要为 ORM 做出有意义的贡献将变得非常困难。从技术角度来看,Rust 与 JavaScript 运行时之间的通信层比纯 JavaScript 实现要慢得多,同时还会在运行时层面引入额外的依赖关系。

    Deno 团队的 Luca Casonato 对此深有感触:

    "当我们听说 Prisma 要从 Rust 迁移时,我们意识到不再需要处理原生插件 API ,这将让在 Deno 中支持 Prisma 变得简单得多。我们所有人都对此感到非常兴奋!"

    迁移带来的显著收益

    迁移到纯 TypeScript 客户端为更快的运行时、更小的体积和更简单的部署流程奠定了基础。开发者不再需要担心特定运行时的兼容性问题,也不必担心像 Cloudflare Workers 这样的基础设施提供商对应用大小的限制。

    经过持续迭代和优化,Prisma 团队取得了令人瞩目的成果:

    • 体积减少 90%:打包输出大幅缩小
    • 性能提升 3 倍:查询执行速度显著加快
    • 资源占用降低:CPU 和内存利用率大幅下降
    • 部署更简单:Vercel Edge 和 Cloudflare Workers 的部署流程更加顺畅

    这些改进都有详尽的基准测试数据支持。更重要的是,开发者无需重构整个应用程序就能享受到这些好处,迁移过程非常简单直接。

    知名开发者 Kent C. Dodds 在体验后给出了积极反馈:

    "我在几周前完成了升级,整个过程非常顺利。切换到新的无 Rust 客户端是如此简单,这真是太棒了。"

    生成代码的新归宿:从 node_modules 到项目源码

    工作流程的优化

    Prisma 团队认真听取了社区关于生成代码处理方式的反馈,并进行了重大改进。此前,Prisma 习惯在项目的 node_modules 目录中生成客户端代码。虽然这样做让生成的客户端看起来像普通库一样,但随着时间推移,他们发现这种方式严重影响了开发者的工作流程。

    当客户端需要更新时,所有应用相关的进程都必须先停止,然后才能重新生成类型。这不仅打断了开发流程,还降低了开发效率。

    现在,Prisma 默认在项目源代码目录中生成类型和 Prisma Client 。这样一来,开发者现有的开发和构建工具会将其视为应用程序的一部分。当开发者修改模型并运行 prisma generate 时,工具和文件监视器可以立即响应这些变化,保持开发工作流程的连续性。整个 Prisma 配置现在真正成为了项目的一部分,而不再是隐藏在 node_modules 中的"黑盒"。

    全新的配置文件系统

    Prisma 团队还引入了全新的 Prisma 配置文件,支持动态项目配置。这个配置文件的核心目的是将数据定义与 Prisma 的数据交互方式分离开来。

    在此之前,项目配置分散在 Prisma schema 文件或 package.json 中。新的 Prisma 配置文件统一了配置管理,开发者可以在一个地方定义 schema 位置、种子脚本或数据库 URL 。由于配置文件支持 JavaScript 或 TypeScript 格式,开发者可以使用 dotenv 等工具进行动态配置,这为开发者提供了更大的灵活性,也符合现代开发工具的标准。

    类型系统的性能革命

    与 ArkType 的合作

    类型安全是 Prisma ORM 的核心优势之一。Prisma 团队不仅要确保提供正确的类型,还要以最高效的方式实现。为了改进类型生成系统,他们与 ArkType 的创建者 David Blass 展开了深度合作,全面评估了类型生成表现。

    评估结果令人振奋:

    • Schema 评估类型减少 98%:大幅降低了类型系统的复杂度
    • 查询评估类型减少 45%:查询相关的类型开销显著降低
    • 类型检查速度提升 70%:完整的类型检查过程更加快速

    为什么这很重要?

    与生态系统中的其他 ORM 相比,Prisma 生成的类型不仅评估速度更快,而且需要更少的类型定义就能为开发者提供有用的 TypeScript 信息。这意味着开发者可以更自信地构建应用程序,因为 Prisma 提供的类型安全不仅快速,而且开销更小。

    Prisma Postgres:为所有人打造的数据库服务

    不仅仅是 ORM

    Prisma 不仅仅是一个 ORM 工具。Prisma 团队推出的托管 Postgres 数据库服务旨在解决开发者在开始使用 Prisma ORM 时面临的首要问题——如何快速获得一个可用的数据库。

    技术架构优势

    Prisma Postgres 基于由 unikernel microVM 驱动的裸机基础设施构建。这意味着数据库服务不仅启动快速,而且能够持续保持高性能。Prisma 团队始终将开发者体验放在首位,自动处理所有复杂的运维工作,让开发者无需关心服务器配置、资源分配等底层细节。

    所有配置和管理工作都由 Prisma 团队负责,Prisma Postgres 与 Prisma ORM 实现了原生集成,为开发者提供与 ORM 同样出色的开发者体验。

    极简的启动流程

    开始使用 Prisma Postgres 非常简单,只需在终端运行一个命令即可。系统会自动为开发者配置数据库,并提供认领链接。对于在开发工作流程中使用 AI 代理的开发者,Prisma 还提供了专用的 API 和 MCP 服务器,可以在需要时自动创建和管理数据库。

    Jason Lengstorf 分享了他的使用体验:

    "每当我使用 Prisma 时,我都会按照入门指南安装各种工具,然后才意识到我还需要去获取一个数据库。我总是在这个过程中感到困惑,所以能够如此轻松地创建数据库真是太棒了!"

    标准协议支持

    Prisma Postgres 并没有止步于简单的数据库托管。Prisma 团队现在采用了标准的 Postgres 连接协议,这意味着更广泛的生态系统工具都可以与数据库通信。无论是 Cloudflare Hyperdrive 、TablePlus 、Retool ,还是其他 ORM 工具,都可以无缝使用 Prisma Postgres 。

    这一切都得益于 Prisma Postgres 基于标准 Postgres 构建,同时针对最佳使用体验进行了优化。

    其他重要更新

    这个版本包含了大量改进和新功能,如果一一详述,这篇文章会变得非常冗长。

    Prisma 团队花费了大量时间处理积压的问题和功能请求,解决了一些最受社区关注的需求,包括:

    • 映射枚举支持
    • 更新了项目所需的最低 Node.js 和 TypeScript 版本
    • 全新版本的 Prisma Studio (通过 npx prisma studio 访问)

    开发者可以在 Prisma 的更新日志中找到此版本的所有详细内容,Prisma 团队还提供了完整的迁移指南帮助开发者顺利升级。

    结语

    对 Prisma 团队而言,Prisma 7 不仅仅是一个版本发布,更是 Prisma ORM 和 Prisma Postgres 未来发展的基石。他们希望构建的工具能够为开发者提供最佳体验,让开发者能够专注于构建和发布出色的应用程序。

    Prisma 团队特别感谢他们令人难以置信的社区,以及所有在预发布阶段提供宝贵反馈的开发者。如果开发者正在尝试 Prisma 7 ,可以向 Prisma 团队反馈想法和体验。

    15 条回复    2025-11-20 22:18:36 +08:00
    DICK23
        1
    DICK23  
       9 小时 54 分钟前
    drizzle 项目规模大了之后类型推导会变得很卡,不知道 Prisma 有没有这个问题
    K332
        2
    K332  
       9 小时 51 分钟前   ❤️ 1
    好久没有用 prisma 了,另外新版本 timezone 的时区设置那个 bug 解决了没有
    moment082
        3
    moment082  
    OP
       9 小时 42 分钟前
    @K332 没有......
    w568w
        4
    w568w  
       9 小时 40 分钟前   ❤️ 6
    看了下博客,放弃 Rust 主要是下面几个原因:

    1. 任何原生语言(包括 Rust 、C 和 C++)和 Node.js 交互都需要在介面处频繁做序列化/反序列化。在大量数据 I/O 的情况下,多花费的额外时间几乎抵消了原生语言带来的性能增益;

    2. 需要维护两套代码,更难吸引外部贡献者、编译工具链更复杂、Debug 定位问题原因更麻烦,且部署也要携带原生二进制,对不同 npm-like 的包管理器( pnpm ,yarn ,bun ,deno……)都需要单独做兼容;

    3. I/O 密集的场景,TypeScript 这种有第一方异步运行时支持的语言,反而比 Rust 更有吞吐量优势。

    另外「性能提升 3.4x 」的说法,基本可以完全归因于移除了 序列化/反序列化 过程。
    SayHelloHi
        5
    SayHelloHi  
       9 小时 37 分钟前
    看到国外主播视频 清一色的使用 prisma
    ilaipi
        6
    ilaipi  
       9 小时 24 分钟前
    用 prisma 很久了,从一开始生成到 node_modules ,现在自定义生成的位置,越来越好用了
    Ketteiron
        7
    Ketteiron  
       8 小时 23 分钟前
    @DICK23 #1 Prisma 没这问题,因为它的类型是自动生成的,不像 drizzle 需要 schema->type 产生实时大量 tsserver 性能开销。但 Prisma6 的类型系统有重大缺陷,用过 drizzle 的用户可能无法习惯。drizzle 的设计目标之一就是解决 prisma 大量令人难以忍受 DX 问题。
    Prisma7 用了 ArkType 可能性能会稍好一点。
    另外据说 drizzle 测试版的 ts 性能提高了二十倍,我还没时间去验证。

    另外 schema->type 是唯一正确的路,即使它再慢也要忍下去。
    CodeCodeStudy
        8
    CodeCodeStudy  
       7 小时 50 分钟前   ❤️ 1
    真够折腾的,搞一个 ORM 就像造星一样
    Gilfoyle26
        9
    Gilfoyle26  
       6 小时 34 分钟前
    @moment082 #3 那不就是,我很强,但是我少一条腿嘛
    ClaudeCode
        10
    ClaudeCode  
       6 小时 16 分钟前
    @K332 别打脸
    ns09005264
        11
    ns09005264  
       5 小时 35 分钟前
    为什么一个 nodejs 的项目之前会想到用 Rust ?这已经是我在本站看到的第二次拿离开 Rust 说事了。
    exhades
        12
    exhades  
       4 小时 30 分钟前
    算了吧,用它还不如用 drizzle-orm
    bbbblue
        13
    bbbblue  
       3 小时 56 分钟前
    @DICK23 Prisma 跑 sql 隐藏太多细节了。。他之前 mysql 的 upsert (现在不知道)用的是 select 然后 insert 或者 update 连个原子性都保证不了。。找到 issue 官方没说要修 然后弃了😂😂😂😂
    streamrx
        14
    streamrx  
       3 小时 47 分钟前 via iPhone
    一个 orm 有这么复杂吗 还已经搞了 7 个大版本了
    neutrino
        15
    neutrino  
       3 小时 5 分钟前
    @ns09005264 因为所有的项目都将用 rust 重写……因为没有不能用 rust 写的项目(
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:24 · PVG 01:24 · LAX 09:24 · JFK 12:24
    ♥ Do have faith in what you're doing.