如何优化我的 Cloud Function 以更有效地响应 Firestore 文档状态更改?有没有办法使这个过程由事件驱动而不是使用定期检查?我正在寻找一种方法,最大限度地减少 Firestore 读/写并减少与轮询相关的延迟和成本。 想象一下,我启动一个程序并启动两个进程:
这是下面的示例:
// Firestore Trigger to monitor document changes
exports.monitorDocument = functions.firestore
.document('myCollection/myDocument')
.onUpdate((change, context) => {
// Check the updated document status
const newValue = change.after.data();
const oldValue = change.before.data();
if (newValue.status !== oldValue.status) {
console.log('Document status changed');
// My logic
}
});
// Trigger to start the routine and manage the flow
exports.startRoutine = functions.https.onRequest(async (req, res) => {
const docRef = admin.firestore().collection('myCollection').doc('myDocument');
// Routine
try {
const doc = await docRef.get();
if (doc.exists && doc.data().status === 'active') {
// My logic
// After the routine, check the document again before moving to 'Execution'
const updatedDoc = await docRef.get();
if (updatedDoc.data().status === 'active') {
console.log('Proceeding to execution');
// Next logic
} else {
console.log('Status changed, halting execution');
}
}
} catch (error) {
console.log('Error:', error);
}
res.send('Process completed');
});
任何使用其他逻辑、Firestore 触发器或其他 Google Cloud 服务来管理此类工作流程的见解或示例将不胜感激。
有没有办法让这个过程由事件驱动而不是使用定期检查?
Firebase 的云函数确实是事件驱动的,并且始终会响应 Firebase 产品中发生的事件而触发,例如 Firebase 身份验证、Cloud Firestore、实时数据库 或 Cloud Storage。
我正在寻找一种方法,最大限度地减少 Firestore 读/写并减少与轮询相关的延迟和成本。
Firebase 的云函数不会进行轮询,除非您在其中编写进行轮询的代码。
看到你的代码,我可以说第一个函数将在更新匹配文档时触发,而第二个函数将在通过 HTTP 显式调用时触发。
说到速度,我认为您很可能正在经历所谓的功能冷启动。欲了解更多信息,请参阅下面的资源: