Prisma 7 重磅发布:告别 Rust,拥抱 TypeScript,性能提升 3 倍 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
moment082
V2EX    程序员

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

  •  
  •   moment082 2 天前 3290 次点击

    最近在使用 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 团队反馈想法和体验。

    18 条回复    2025-11-21 22:13:43 +08:00
    DICK23
        1
    DICK23  
       2 天前
    drizzle 项目规模大了之后类型推导会变得很卡,不知道 Prisma 有没有这个问题
    K332
        2
    K332  
       2 天前   1
    好久没有用 prisma 了,另外新版本 timezone 的时区设置那个 bug 解决了没有
    moment082
        3
    moment082  
    OP
       2 天前
    @K332 没有......
    w568w
        4
    w568w  
       2 天前   8
    看了下博客,放弃 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  
       2 天前
    看到国外主播视频 清一色的使用 prisma
    ilaipi
        6
    ilaipi  
       2 天前
    用 prisma 很久了,从一开始生成到 node_modules ,现在自定义生成的位置,越来越好用了
    Ketteiron
        7
    Ketteiron  
       2 天前   1
    @DICK23 #1 Prisma 没这问题,因为它的类型是自动生成的,不像 drizzle 需要 schema->type 产生实时大量 tsserver 性能开销。但 Prisma6 的类型系统有重大缺陷,用过 drizzle 的用户可能无法习惯。drizzle 的设计目标之一就是解决 prisma 大量令人难以忍受 DX 问题。
    Prisma7 用了 ArkType 可能性能会稍好一点。
    另外据说 drizzle 测试版的 ts 性能提高了二十倍,我还没时间去验证。

    另外 schema->type 是唯一正确的路,即使它再慢也要忍下去。
    CodeCodeStudy
        8
    CodeCodeStudy  
       2 天前   1
    真够折腾的,搞一个 ORM 就像造星一样
    Gilfoyle26
        9
    Gilfoyle26  
       2 天前
    @moment082 #3 那不就是,我很强,但是我少一条腿嘛
    ClaudeCode
        10
    ClaudeCode  
       2 天前
    @K332 别打脸
    ns09005264
        11
    ns09005264  
       2 天前
    为什么一个 nodejs 的项目之前会想到用 Rust ?这已经是我在本站看到的第二次拿离开 Rust 说事了。
    exhades
        12
    exhades  
       2 天前
    算了吧,用它还不如用 drizzle-orm
    bbbblue
        13
    bbbblue  
       2 天前
    @DICK23 Prisma 跑 sql 隐藏太多细节了。。他之前 mysql 的 upsert (现在不知道)用的是 select 然后 insert 或者 update 连个原子性都保证不了。。找到 issue 官方没说要修 然后弃了
    streamrx
        14
    streamrx  
       2 天前 via iPhone
    一个 orm 有这么复杂吗 还已经搞了 7 个大版本了
    neutrino
        15
    neutrino  
       2 天前
    @ns09005264 因为所有的项目都将用 rust 重写……因为没有不能用 rust 写的项目(
    burnsby
        16
    burnsby  
       1 天前
    我还是选择 drizzle, 要灵活地多, 我用它构造 SQL 用起来别提有多舒服了
    brucewar
        17
    brucewar  
       1 天前
    sequelize 已经被放弃了吗?
    SingeeKing
        18
    SingeeKing  
    PRO
       1 天前
    为了一个 ORM 还要专门学一套语法总觉得怪怪的 <- 这是我用 Drizzle 的理由

    同样,当年,我也是因为 Vue 需要专门去学一套新的模板语言而选择了 React
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1316 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 17:10 PVG 01:10 LAX 09:10 JFK 12:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86