![](/img/trans.png)
[英]Slow Firebase Firestore cold starts in Cloud Functions
[英]Firebase Dynamic Pages using Cloud Functions with Firestore are slow
我們有動態頁面由Firebase雲功能提供服務 ,但TTFB
在這些頁面上的速度非常慢,TTFB為900ms - 2s
,起初我們只是認為它是一個cold start
問題,但即使流量一致,它也很慢TTFB為700ms - 1.2s
。
這對我們的項目來說有點問題,因為它依賴於自然流量,而Google Pagespeed需要的服務器響應時間不到200ms
。
無論如何,我們試圖檢查可能導致問題的原因,我們用Firestore查明了它,當Cloud Function訪問Firestore時,我們注意到有一些延遲。 這是我們如何實現Cloud Function和Firestore的基本示例代碼:
dynamicPages.get('/ph/test/:id', (req, res) => {
var globalStartTime = Date.now();
var period = [];
db.collection("CollectionTest")
.get()
.then((querySnapshot) => {
period.push(Date.now() - globalStartTime);
console.log('1', period);
return db.collection("CollectionTest")
.get();
})
.then((querySnapshot) => {
period.push(Date.now() - globalStartTime);
console.log('2', period);
res.status(200)
.send('Period: ' + JSON.stringify(period));
return true;
})
.catch((error) => {
console.log(error);
res.end();
return false;
});
});
這是在Firebase + Cloud Functions + NodeJS上運行的
CollectionTest非常小,里面只有100個文檔,每個文檔都有以下字段:
directorName: (string)
directorProfileUrl: (string)
duration: (string)
genre: (array)
posterUrl: (string)
rating: (string)
releaseDate: (string)
status: (int)
synopsis: (string)
title: (string)
trailerId: (string)
urlId: (string)
通過此測試,我們將得到以下結果:
[467,762] 1.52s
[203,315] 1.09s
[203,502] 1.15s
[191,297] 1.00s
[206,319] 1.03s
[161,267] 1.03s
[115,222] 843ms
[192,301] 940ms
[201,308] 945ms
[208,312] 950ms
此數據是[ Firestore Call 1 Exectution Time , Firestore Call 2 Exectution Time ] TTFB
如果我們檢查測試結果,有跡象表明TTFB正在降低,也許是雲功能已經預熱了? 但即便如此,基於我們第二次Firestore Call的結果,Firestore在Cloud Function中耗盡了200-300ms,即使Firestore執行的時間較短,TTFB仍然需要600-800ms,但這是另一回事。
無論如何,任何人都可以幫助我們如何在我們的雲功能(或者如果可能的話,TTFB性能)中改進Firestore性能? 也許我們正在做一些我們不知道的明顯錯誤的事情?
我會嘗試提供幫助,但在返回dynamicPages
之前可能缺少關於你加載的內容的一些上下文,但這里有一些線索:
首先,明顯的部分( 我必須指出它 ):
1 - 注意如何衡量TTFB:
遠程測量TTFB意味着您還要同時測量網絡延遲,這會模糊TTFB實際測量的事物:Web服務器能夠響應請求的速度。
2 - 來自Google Developers有關Understanding Resource Timing
文檔( 此處 ):
[...]。 或者:
Bad network conditions between client and server, or A slowly responding server application
為了解決高TTFB問題,首先要切斷盡可能多的網絡。 理想情況下,在本地托管應用程序,看看是否還有一個大的TTFB。 如果有,則需要針對響應速度優化應用程序。 這可能意味着優化數據庫查詢,為某些內容部分實現緩存或修改Web服務器配置。 后端可能很慢的原因有很多。 您需要對您的軟件進行研究,並找出不符合您的性能預算的內容。
如果TTFB本地較低,那么客戶端和服務器之間的網絡就成了問題。 網絡遍歷可能受到任何數量的阻礙。 客戶端和服務器之間有很多要點,每個都有自己的連接限制,可能會導致問題。 測試減少這種情況的最簡單方法是將您的應用程序放在另一台主機上,看看TTFB是否有所改進。
不是那么明顯的:
您可以在此處查看有關Cloud Functions Performance
的官方Google文檔: https : //cloud.google.com/functions/docs/bestpractices/tips
你以前需要一些文件嗎?
根據Firebase cloud functions is very slow
這個答案, Firebase cloud functions is very slow
: Firebase雲功能非常慢 :
看起來很多這些問題都可以使用隱藏變量process.env.FUNCTION_NAME來解決,如下所示: https : //github.com/firebase/functions-samples/issues/170#issuecomment-323375462
加載這些動態頁面是由guest
用戶還是已logged
用戶訪問的? 因為第一個請求可能需要對身份驗證詳細信息進行排序,因此已知它更慢...
如果沒有這方面的工作,我將看看常見的性能問題,如數據庫連接( 這里 : Optimize Database Performance
),改進服務器配置,緩存盡你所能,並在您的應用程序中處理可能的重定向...
最后,通過Internet閱讀,您的問題有很多線程(簡單雲功能的性能低下)。 像這樣: https : //github.com/GoogleCloudPlatform/google-cloud-node/issues/2374 &&在SO: https : //stackoverflow.com/search? q =% 5Bgoogle-cloud-functions%5D+slow
評論如下:
因為在使用雲功能時,每次http調用都會產生懲罰,但開銷仍然非常高(即每次HTTP調用0.8秒)。
要么:
請記住,Cloud Functions和Cloud Firestore都處於測試階段,不能保證性能。 我敢肯定,如果將性能與實時數據庫進行比較,您會看到更好的數字。
也許它仍然是一個問題。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.