2023年7月12日

Prisma 5:預設更快

Prisma 5引入了使其顯著更快的更改。由於Prisma Client在底層使用了一種新的、更高效的基於JSON的線協議,這些更改特別改善了在無伺服器環境中使用Prisma的體驗。

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是一個主要版本增量,它帶來了一些破壞性變更。我們預計只有少數使用者會受到這些變更的影響。但是,在升級之前,我們建議您檢視我們的升級指南,以瞭解對您的應用程式的影響。如果您遇到任何錯誤,請提交問題,或者如果已經存在相應的問題,請為其點贊。

我們致力於提升Prisma的整體效能,並將繼續推出解決效能相關問題的改進。務必在Twitter上關注我們,不要錯過任何更新!

不要錯過下一篇文章!

訂閱Prisma新聞郵件

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