2023年7月12日

Prisma 5:默认更快

Prisma 5引入了使其显著更快的更改。这些更改特别改善了在无服务器环境中使用Prisma的体验,这得益于Prisma Client在底层使用的新型、更高效的基于JSON的线协议

Prisma 5

Prisma Client启动性能提升

从Prisma 4.8.0开始,我们加倍努力提高Prisma的性能和开发体验。特别是,我们专注于改善Prisma在无服务器环境中的启动性能。

在我们提高Prisma性能的过程中,我们发现了一些效率低下的地方,并解决了它们。

为了说明自从我们开始投入精力改善性能以来的差异,请看下面的图表。

第一张图表代表了在开始改进之前,部署到AWS Lambda的应用程序(具有相对较大的Prisma schema,包含500个模型)的启动性能

Before

之前

下图显示了Prisma 5在性能改进工作之后的性能

After

之后

如您所见,Prisma的启动性能有了显著提升。现在我们深入探讨并讨论使我们达到这一大幅改进状态的各种变化。

更高效的基于JSON的线协议

在Prisma 4.11.0之前,Prisma使用类似GraphQL的协议在Prisma Client和查询引擎之间进行通信。这带来了一些影响Prisma Client性能的怪癖——尤其是在无服务器环境中的冷启动时。

在我们的性能探索中,我们注意到当前的实现增加了相当大的CPU和内存开销,特别是对于较大的schema。

我们解决这个问题的方法之一是完全重新设计我们的线协议。通过使用JSON,我们能够使Prisma Client和查询引擎之间的通信效率显著提高。我们在版本4.11.0中通过jsonProtocol预览功能标志发布了此功能。

在我们开始任何性能改进工作之前,平均的“冷启动”请求是这样的

Before

之前

启用jsonProtocol预览功能后,图表如下所示

After

之后

在收到用户大量宝贵反馈并进行广泛测试后,我们很高兴地宣布jsonProtocol现已普遍可用,并将成为Prisma Client在底层使用的默认线协议。

如果您对更多细节感兴趣,我们写了一篇深入探讨我们为提高Prisma Client启动性能所做更改的详细博客文章:《我们如何将Prisma的无服务器冷启动速度提高9倍》。

更小的JavaScript运行时和优化的内部结构

除了更改协议,我们还对Prisma的性能进行了大量更改

  • 随着新的基于JSON的线协议成为默认协议,我们借此机会清理了Prisma Client的依赖项。这包括将Prisma Client的依赖项减少了一半并移除了之前的类似GraphQL的协议实现。这减少了执行时间以及Prisma Client使用的内存量。

  • 我们还优化了查询引擎的内部结构。具体来说,是负责在查询引擎启动时转换Prisma schema和建立数据库连接的部分。此外,我们现在延迟生成查询schema中许多类型名称的字符串,这改善了Prisma Client的内存使用,并带来了显著的运行时性能提升。

  • 此外,连接建立和Prisma schema转换现在并行发生,而不是像以前那样顺序运行。

在我们进行这三项更改之前,启用jsonProtocol预览功能后的图表如下所示

Before

之前

进行这三项更改后,响应时间缩短了三分之二

After

之后

现在请求留下的足迹非常小。

为了放大比较这些更改如何影响Prisma Client,第一张图显示了基于JSON的线协议的影响

Before: JSON-based wire protocol impact

之前:基于JSON的线协议的影响

下图显示了Prisma Client在我们优化其内部结构并减小JavaScript运行时大小后的性能

After: Smaller JavaScript runtime and optimized internals impact

之后:更小的JavaScript运行时和优化的内部结构的影响

试用Prisma 5并分享您的反馈

我们鼓励您升级到Prisma 5.0.0,并期待听到您的反馈!🎉

Prisma 5是一个主要版本更新,它带来了一些破坏性更改。我们预计只有少数用户会受到这些更改的影响。但是,在升级之前,我们建议您查看我们的升级指南,以了解对您的应用程序的影响。如果您遇到任何bug,请提交问题,如果已存在相应问题,请点赞该问题。

我们致力于改善Prisma的整体性能,并将继续发布解决性能相关问题的改进。请务必在X/Twitter上关注我们,以免错过任何更新!

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.