我写了一个Firebase Cloud Function,它在创建文档时触发。之后,我正在使用批量更新更新文档。我在"测试"中只有5个文档。集合,更新这些文档需要7-10秒。我的目标是最多2秒。这是正常的还是可以进一步优化?
代码:
import * as functions from "firebase-functions";
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
exports.onCreateOrder = functions.firestore.document('PPB/{id}/Orders/{order_id}').onCreate((snapshot, context) => {
var userRef = db.collection('test');
if (userRef != null) {
let batch = db.batch();
return userRef.get()
.then(snapshot => {
snapshot.forEach(doc => {
batch.update(doc.ref, "name", "Paul");
});
return batch.commit();
});
} else {
return null;
}
}
);
正如Tarik Huber所提到的,Firebase函数往往有更长的执行时间,这是因为冷启动。我想把重点放在如何进一步减少或优化时间上。
根据这个stackoverflow线程,社区成员提到了几种可以将Firebase函数的执行时间从7-8秒缩短到2-3秒的方法
- "需要全局文件和一般初始化作用域是冷启动过程中速度变慢的一个重要原因。"作为一个项目得到的函数越多,全局作用域越受污染。可以是如果将函数范围划分到单独的文件中,问题就解决了。也搬所有的要求都放入init方法中,然后作为
- 你可以有一个index.js文件来导入和列出所有的其他Cloud Functions功能。一个技巧是使用process.env。FUNCTION_TARGET env变量,就像这里一样当前被触发的函数的名称。在部署过程中
- 也定期ping功能并不能消除寒冷它会使它们变暖,使它们不那么频繁。
- 寻找提示,技巧和常见的黑客在这里提到的
代码看起来很好。我看不出有什么比这更好的了。你如何测量函数执行所需的时间?
确保不要在函数"冷启动"时进行测量。你解释的时间和函数"冷启动"的时间相当。