我正在尝试使用 Firebase Cloud Functions 更新文档。我的文档更新不需要考虑现有值,因为它们主要涉及单个文档更新,且风险最小。
我正在尝试使用 Firebase Cloud Functions 更新文档。我的文档更新不需要考虑现有值,并且由于它们主要涉及单个文档更新,冲突风险最小,因此我不会进行事务处理。
问题是,即使一个测试用例也需要大约 3 分钟才能完成。作为一名初级开发人员,我以前从未遇到过 Cloud Functions 的延迟,而且我很难找出问题的根本原因。
以下是我的完整代码及其生成的日志:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.authenticator = functions.region('asia-northeast1').https.onRequest(async (req, res) => {
const startTime = new Date().getTime();
console.log("Function execution started at: ", new Date().toISOString());
if (req.method !== "POST") {
console.log("Method Not Allowed");
return res.status(405).send("Method Not Allowed");
}
const data = req.body;
if (!data || !data.data || !Array.isArray(data.data)) {
console.log("Bad Request");
return res.status(400).send("Bad Request");
}
res.status(200).send("Processing...");
console.log("Process started at: ", new Date().toISOString());
for (const item of data.data) {
if (!item || !item.phoneNum || !item.authCode) {
console.log("Invalid data: ", item);
continue;
}
try {
const updateStart = new Date().getTime();
console.log("Update started for authCode: ", item.authCode, " at: ", new Date().toISOString());
await admin.firestore().collection("auth").doc(item.authCode).update({
phoneNum: item.phoneNum,
verified: true,
timestamp: admin.firestore.FieldValue.serverTimestamp()
});
const updateEnd = new Date().getTime();
console.log("Success: ", item.authCode, " at: ", new Date().toISOString(), " Update took: ", (updateEnd - updateStart) / 1000, " seconds");
} catch (err) {
console.error(`Error processing ${item.authCode}:`, err);
}
}
const endTime = new Date().getTime();
console.log("Process ended at: ", new Date().toISOString());
console.log("Total execution time: ", (endTime - startTime) / 1000, " seconds");
});
函数执行已开始 函数执行已开始于:2024-07-09T21:28:39.167Z
进程开始于:2024-07-09T21:28:39.188Z
已开始对 authCode: 519504f79458497cb8c4709739fbc877 进行更新,时间为:2024-07-09T21:28:39.188Z
函数执行耗时 80 毫秒,完成状态代码:200
成功:519504f79458497cb8c4709739fbc877 于:2024-07-09T21:31:36.657Z
更新耗时:177.469 秒
进程结束于:2024-07-09T21:31:36.957Z
总执行时间:177.79秒
我的 Cloud Functions 的区域是 asia-northeast1
,而 Firestore 位于 asia-northeast3
。由于担心潜在的区域相关问题,我更改了区域,但之前即使在 us-central1 区域,我也能快速处理更新。
供您参考,我的代码通过来自 Google Apps Scripts 的 POST 请求接收 Gmail 处理的数据。