У нас динамические страницы , обслуживаемые Firebase Cloud Functions , но TTFB
очень медленный на этих страницах с TTFB 900ms - 2s
, сначала мы только предположили, что этоэто проблема cold start
, но даже при стабильном трафике она очень медленная при TTFB 700ms - 1.2s
.
Это немного проблематично для нашего проекта, поскольку он зависит от органического трафика, и Google Pagespeed потребуетсяответ сервера меньше 200ms
.
В любом случае, мы попытались проверить, что может быть причиной проблемы, и мы определили ее с помощью Firestore, когда облачная функция обращается к Firestore, мы заметили некоторые задержки.Это базовый пример кода того, как мы реализуем облачную функцию и 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 + Облачные функции + 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
Thisданные: [ Firestore Call 1 Время ожидания , Firestore Call 2 Время ожидания ] TTFB
Если мы проверим результаты теста, топризнаки того, что TTFB снижается, может быть, это когда облачная функция уже прогрелась?Но даже в этом случае Firestore расходует 200-300 мс в облачной функции, основываясь на результатах нашего второго вызова Firestore, и даже если Firestore потребовалось меньше времени для выполнения, TTFB все равно займет 600-800 мс, но это другая история.
В любом случае, кто-нибудь может помочь, как мы можем улучшить производительность Firestore в наших облачных функциях (или, если возможно, производительность TTFB)?Может быть, мы делаем что-то явно неправильное, о чем не знаем?