【发布时间】:2018-11-12 22:10:56
【问题描述】:
我们有 动态页面 由 Firebase Cloud Functions 提供服务,但是 TTFB 在这些页面上非常慢,TTFB 为 900ms - 2s,起初我们只是假设它是一个cold start 问题,但即使流量稳定,在700ms - 1.2s 的TTFB 上也很慢。
这对我们的项目来说有点问题,因为它依赖于自然流量,而且 Google Pagespeed 需要的服务器响应小于200ms。
无论如何,我们尝试检查可能导致问题的原因,并使用 Firestore 进行了定位,当云函数访问 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 调用 1 执行时间、Firestore 调用 2 执行时间] TTFB
如果我们检查测试结果,有迹象表明 TTFB 正在变低,可能是 Cloud Function 已经预热的时候?但即便如此,根据我们第二次 Firestore 调用的结果,Firestore 在 Cloud Function 中消耗了 200-300 毫秒,即使 Firestore 执行时间较短,TTFB 仍将占用 600-800 毫秒,但那是另一回事。
无论如何,任何人都可以帮助我们如何提高 Cloud Functions 中的 Firestore 性能(或者如果可能的话,提高 TTFB 性能)?也许我们正在做一些我们不知道的明显错误的事情?
【问题讨论】:
-
您有免费或付费计划吗?因为带宽变化很大,性能也随之改变:see the firebase plans
-
@Emanuele 我们正在使用 blaze 计划
标签: node.js firebase google-cloud-firestore google-cloud-functions