我在Firebase中有一个简单的云函数,它在http POST中接受JSON,并将其保存到Firestore集合中。它被分配512 It内存。
这个云功能的性能非常差。如果连续执行,往返时间从200到600 it不等,如果很少执行(每5-10分钟一次),则需要4-10秒。我理解冷启动问题,但在AWS上,我从未见过冷启动如此缓慢,也从未见过如此频繁。
下面是我的代码--我想了解一下如何提高性能。
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
const express = require('express');
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// CORS Express middleware to enable CORS Requests.
const cors = require('cors');
app.use(cors({ origin: true }))
app.post('/submitResponse', (req, res) => {
console.log('/submitResponse');
if (!req.body.info)
res.status(422).send()
const payload = req.body.info;
console.log(payload);
const responses = db.collection("responses")
responses.add({
payload: payload,
timestamp: admin.firestore.FieldValue.serverTimestamp()
}).then(function(docRef) {
console.log("Response written with ID: ", docRef.id);
res.status(200).send(JSON.stringify(docRef.id))
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
});
exports.app = functions.https.onRequest(app);
发布于 2018-12-28 07:36:22
要解决一些评论问题:在编写本报告时,用于Firebase的云修复实际上仍处于beta中。
但在这种情况下,Firestore可能不是罪魁祸首。云函数的冷引导时间很可能会掩盖您正在进行的任何数据库操作。
无论何时,云函数都需要时间来划分新实例。
有一个关于云功能性能的章节,它提到了您可以通过最小化模块依赖而获得的潜在收益。
因为函数是无状态的,所以执行环境通常是从头开始初始化的(在所谓的冷启动期间)。当发生冷启动时,将计算函数的全局上下文。 如果您的函数导入模块,那么这些模块的加载时间会在冷启动期间增加调用延迟。通过正确加载依赖项而不加载函数不使用的依赖项,可以减少此延迟以及部署函数所需的时间。
还可以查看关于该主题的云性能地图集视频中提到的一些技巧,如:
在库依赖的情况下,最低挂起的结果是摆脱那些可以实现自己和/或只使用一个或几个函数但需要整个库的依赖关系(我正在查看您,霍达什)。
https://stackoverflow.com/questions/49198208
复制相似问题