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 個模型)時的啟動效能

之前

以下圖表顯示了 Prisma 5 在我們進行效能改進工作後的效能

之後

如您所見,Prisma 的啟動效能有了顯著的提升。 我們現在將深入探討並討論讓我們達到如此改進狀態的各種變更。

更有效率的基於 JSON 的線路協定

在 Prisma 4.11.0 之前,Prisma 使用類似 GraphQL 的協定在 Prisma Client 和查詢引擎之間進行通訊。 這帶來了一些怪異之處,影響了 Prisma Client 的效能,尤其是在無伺服器環境中的冷啟動時。

在我們的效能探索期間,我們注意到目前的實作增加了相當大的 CPU 和記憶體開銷,特別是對於較大的 Schema 而言。

我們為了解決這個問題的解決方案之一是完全重新設計我們的線路協定。 透過使用 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 Schema 以及建立資料庫連線的部分。 此外,我們現在延遲產生查詢 Schema 中許多類型的名稱字串,這改善了 Prisma Client 的記憶體使用量,並帶來顯著的執行階段效能提升。

  • 此外,連線建立和 Prisma Schema 轉換現在並行發生,而不是像以前那樣循序執行。

在我們進行這三項變更之前,啟用 jsonProtocol 預覽功能後的圖表看起來像這樣

之前

在進行這三項變更之後,回應時間縮短了三分之二

之後

現在請求佔用非常小的資源。

為了放大比較這些變更對 Prisma Client 的影響,第一個圖表顯示了基於 JSON 的線路協定的影響

之前:基於 JSON 的線路協定的影響

以下圖表顯示了在我們最佳化其內部結構並縮小 JavaScript 執行階段大小後,Prisma Client 的效能

之後:更小的 JavaScript 執行階段和最佳化的內部結構的影響

試用 Prisma 5 並分享您的意見回饋

我們鼓勵您升級到 Prisma 5.0.0,並期待收到您的意見回饋! 🎉

Prisma 5 是一個主要版本增量,它帶有一些重大變更。 我們預計只有少數用戶會受到這些變更的影響。 但是,在升級之前,我們建議您查看我們的升級指南,以了解對您的應用程式的影響。 如果您遇到任何錯誤,請提交Issue,或者如果已存在相應的 Issue,請為其投票。

我們致力於改善 Prisma 的整體效能,並將繼續發布解決效能相關問題的改進。 請務必在 Twitter 上關注我們,以免錯過任何更新!

不要錯過下一篇文章!

註冊 Prisma 電子報