告別緩慢的GraphQL查詢:使用Graphpinator Persisted Queries提升性能

最近,我負責維護一個使用graphql的api,隨著用戶數量的增加,api的響應速度逐漸變慢。分析后發現,許多用戶都在重復發送相同的查詢,導致服務器在解析和驗證這些查詢上浪費了大量資源。雖然我的解析器函數本身效率很高,但graphql本身的解析和驗證過程卻成為了瓶頸。為了解決這個問題,我嘗試了多種方法,最終找到了infinityloop-dev/graphpinator-persisted-queries這個庫。

這個庫的核心思想是緩存已驗證的GraphQL查詢。通過緩存,服務器可以避免重復進行解析和驗證,從而顯著減少服務器負載并提升響應速度。 這就像在數據庫中使用緩存一樣,可以極大地提升效率。

首先,你需要一個實現了PsrSimpleCacheCacheInterface的緩存實現。你可以選擇redis、memcached或者其他符合 PSR-16 標準的緩存系統。我個人使用了redis,因為它提供了高性能和可靠性。 (當然,你也可以選擇其他更簡單的本地緩存方案,以滿足你的需求)

接下來,使用composer安裝這個庫:

composer require infinityloop-dev/graphpinator-persisted-queries

安裝完成后,你需要將PersistedQueriesModule注冊到你的Graphpinator實例中:

立即學習PHP免費學習筆記(深入)”;

$cacheImpl = new YourCacheImplementation(); // 替換成你的緩存實現$persistModule = new GraphpinatorPersistedQueriesModulePersistedQueriesModule($schema, $cacheImpl);$graphpinator = new GraphpinatorGraphpinator(    $schema,    $catchExceptions,    new GraphpinatorModuleModuleSet([$persistModule, /<em> possibly other modules </em>/]),    $logger,);

就這么簡單!現在,你的Graphpinator實例已經可以緩存查詢了。 第一次請求一個查詢時,它會被解析、驗證并存儲到緩存中;后續的相同查詢將直接從緩存中讀取,從而避免重復處理。

官方提供的基準測試顯示,該庫可以將GraphQL的開銷減少大約80%。在我的實際應用中,API的響應速度得到了顯著提升,服務器負載也明顯降低。 這使得我的API能夠更好地應對日益增長的用戶流量。

總而言之,infinityloop-dev/graphpinator-persisted-queries是一個非常高效的庫,可以輕松地集成到你的Graphpinator項目中,顯著提升GraphQL API的性能。如果你正在尋找一種優化GraphQL性能的方法,強烈推薦你嘗試一下這個庫。 當然,學習Composer的使用可以幫助你更好地管理和使用PHP項目中的各種依賴庫,你可以參考這個Composer在線學習地址:學習地址來了解更多信息。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享