我们 dynamic pages 由 Firebase Cloud Functions 服务,但 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正在降低,也许是 Cloud 功能已经预热了?但即便如此,基于我们第二次Firestore Call的结果,Firestore在Cloud Function中耗尽了200-300ms,即使Firestore执行时间较短,TTFB仍然需要600-800ms,但这是另一回事 .
无论如何,任何人都可以帮助我们如何在我们的 Cloud 功能(或者如果可能的话,TTFB性能)中改进Firestore性能?也许我们正在做一些我们不知道的明显错误的事情?
1 回答
我会尝试提供帮助,但在返回
dynamicPages
之前可能缺少关于你加载的内容的一些上下文,但这里有一些线索:首先,明显的部分(我必须指出它):
1 - 注意如何衡量TTFB:
2 - 来自Google Developers的有关
Understanding Resource Timing
(here)的文档:不是那么明显的:
您可以在此处查看有关
Cloud Functions Performance
的官方Google文档:https://cloud.google.com/functions/docs/bestpractices/tipsDid you require some files before?
根据
Firebase cloud functions is very slow
的回答:Firebase cloud functions is very slow:加载这些动态页面是由
guest
用户还是logged
用户访问?因为第一个请求可能需要对身份验证详细信息进行排序,因此它的速度较慢......如果没有这方面的工作,我将看看常见的性能问题,如数据库连接(here:
Optimize Database Performance
),改进服务器配置,缓存尽你所能,并在您的应用程序中处理可能的重定向...最后,通过Internet阅读,您的问题有很多线程(简单 Cloud 功能的性能低下) . 喜欢这个:https://github.com/GoogleCloudPlatform/google-cloud-node/issues/2374 && in S.O:https://stackoverflow.com/search?q=%5Bgoogle-cloud-functions%5D+slow
评论如下:
要么:
也许它仍然是一个问题 .
希望能帮助到你!