Prisma 5では、大幅な高速化を実現する変更が導入されました。これらの変更は、特にサーバーレス環境でのPrismaの使用体験を向上させます。これは、Prisma Clientが内部で使用する、新しいより効率的なJSONベースのワイヤプロトコルによるものです。
Prisma Clientの起動パフォーマンスの向上
Prisma 4.8.0以降、Prismaのパフォーマンスと開発者体験の向上に重点的に取り組んできました。特に、サーバーレス環境におけるPrismaの起動パフォーマンスの改善に注力しました。
Prismaのパフォーマンス向上を追求する中で、いくつかの非効率性を見つけ出し、それらに対処しました。
パフォーマンス改善への取り組みを始めてからの違いを示すために、以下のグラフをご覧ください。
最初のグラフは、パフォーマンス改善への取り組みを始める前の、比較的大きなPrismaスキーマ(500モデル)を持つAWS Lambdaにデプロイされたアプリの起動パフォーマンスを表しています。

変更前
次のグラフは、パフォーマンス改善作業後のPrisma 5のパフォーマンスを示しています。

変更後
ご覧の通り、Prismaの起動パフォーマンスは大幅に向上しました。次に、この大幅な改善を達成するための様々な変更点について詳しく説明します。
より効率的なJSONベースのワイヤプロトコル
Prisma 4.11.0より前は、Prisma Clientとクエリエンジン間の通信にGraphQLのようなプロトコルを使用していました。これにより、特にサーバーレス環境でのコールドスタート時にPrisma Clientのパフォーマンスに影響を与えるいくつかの癖がありました。
パフォーマンスの調査中、現在の実装では、特に大規模なスキーマの場合、かなりのCPUとメモリのオーバーヘッドが追加されることに気づきました。
この問題を軽減するための解決策の一つは、ワイヤプロトコルを完全に再設計することでした。JSONを使用することで、Prisma Clientとクエリエンジン間の通信を大幅に効率化することができました。この機能は、バージョン4.11.0でjsonProtocol
プレビュー機能フラグの裏でリリースされました。
パフォーマンス改善作業を始める前は、平均的な「コールドスタート」リクエストは次のようでした。

変更前
jsonProtocol
プレビュー機能を有効にした後、グラフは次のようになりました。

変更後
ユーザーからの多くの素晴らしいフィードバックと広範なテストを経て、jsonProtocol
が一般公開され、Prisma Clientが内部で使用するデフォルトのワイヤプロトコルになったことを発表できることを嬉しく思います。
さらに詳しい情報にご興味があれば、Prisma Clientの起動パフォーマンスを改善するために行った変更について詳しく解説した広範なブログ記事を執筆しました:Prismaでサーバーレスコールドスタートを9倍高速化した方法。
より小さなJavaScriptランタイムと最適化された内部処理
プロトコルの変更に加えて、Prismaのパフォーマンスに影響を与える多くの変更も行いました。
-
新しいJSONベースのワイヤプロトコルがデフォルトになったことで、Prisma Clientの依存関係を整理する機会を得ました。これには、Prisma Clientの依存関係を半分に削減し、以前のGraphQLのようなプロトコル実装を削除することが含まれます。これにより、Prisma Clientが使用する実行時間とメモリ量が削減されました。
-
また、クエリエンジンの内部処理を最適化しました。具体的には、クエリエンジンが起動したときのPrismaスキーマの変換とデータベース接続の確立を担当する部分です。さらに、クエリスキーマ内の多くの型の名前の文字列を遅延生成するようになり、これによりPrisma Clientのメモリ使用量が改善され、大幅な実行時パフォーマンスの向上がもたらされます。
-
加えて、接続確立とPrismaスキーマ変換が、以前のように順次実行されるのではなく、並行して行われるようになりました。
これらの3つの変更を行う前は、jsonProtocol
プレビュー機能を有効にした状態で、グラフは次のようでした。

変更前
これらの3つの変更を行った後、応答時間は3分の2に短縮されました。

変更後
リクエストは現在、非常に小さなフットプリントしか残しません。
これらの変更がPrisma Clientにどのような影響を与えるかをより詳しく比較するために、最初のグラフはJSONベースのワイヤプロトコルの影響を示しています。

変更前: JSONベースのワイヤプロトコルの影響
次のグラフは、内部処理を最適化し、JavaScriptランタイムのサイズを削減した後のPrisma Clientのパフォーマンスを示しています。

変更後: より小さなJavaScriptランタイムと最適化された内部処理の影響
Prisma 5を試してフィードバックを共有してください
Prisma 5.0.0へのアップグレードをお勧めします。皆様からのフィードバックをお待ちしております! 🎉
Prisma 5はメジャーバージョンアップであり、いくつかの破壊的変更を伴います。変更の影響を受けるユーザーはごく少数であると予想していますが、アップグレードする前に、アプリケーションへの影響を理解するためにアップグレードガイドをご確認いただくことをお勧めします。何かバグに遭遇した場合は、イシューを提出するか、既存の対応するイシューに賛成票を投じてください。
私たちはPrismaの全体的なパフォーマンス向上に尽力しており、パフォーマンス関連の問題に対処する改善を引き続き提供していきます。最新情報を見逃さないように、ぜひTwitterで私たちをフォローしてください!
次の投稿をお見逃しなく!
Prismaニュースレターに登録