Javascript Firebase的异步/等待云函数,性能较慢
我需要一些帮助和支持来解决Firebase云函数中的性能问题。我将async/await与try/catch块结合使用,以提高代码的可读性 我有一个简单的函数,它基于队列写入事件中的params键值,在数据库中的两个位置上进行写入 这个简单的功能平均需要1500毫秒才能完成。在我看来,对于一个简单的数据库写入任务来说似乎有点长。我认为我在代码中犯了一个错误,代码的一部分没有正确解析 云函数 更新 根据这些评论,我对代码做了一些改进。性能仍然相同,但代码看起来更好 云函数Javascript Firebase的异步/等待云函数,性能较慢,javascript,firebase,async-await,google-cloud-functions,Javascript,Firebase,Async Await,Google Cloud Functions,我需要一些帮助和支持来解决Firebase云函数中的性能问题。我将async/await与try/catch块结合使用,以提高代码的可读性 我有一个简单的函数,它基于队列写入事件中的params键值,在数据库中的两个位置上进行写入 这个简单的功能平均需要1500毫秒才能完成。在我看来,对于一个简单的数据库写入任务来说似乎有点长。我认为我在代码中犯了一个错误,代码的一部分没有正确解析 云函数 更新 根据这些评论,我对代码做了一些改进。性能仍然相同,但代码看起来更好 云函数 鉴于您的代码看起来不错,
鉴于您的代码看起来不错,我没有看到任何不返回的代码路径,我只是使用async await进行了自己的测试,下面是我的结果: 代码更新和部署后的执行:1058ms 执行时间:120毫秒 执行时间:38毫秒 我怀疑您的功能正在冷启动。在代码更新后第一次执行函数时,Firebase需要设置环境,这在第一次执行时需要一段时间。当函数有一段时间没有使用时也会发生同样的情况 其中一位开发人员在此提供更多信息:
编辑:忘了提到我正在使用打字脚本。这意味着我的代码显然将被传输,因为Firebase本机还不支持async/await。我怀疑你也在做类似的事情。不是答案,但不是如果!event.data.exists{return;}如果event.data.exists{有点多余的?event.params&&key=event.params.$key;对我来说似乎是语法错误。请使用适当的if语句。您应该删除所有这些try捕获。您实际上并没有在任何地方处理错误。您甚至知道您没有遇到超时或其他问题吗?您是否对特定部分进行过调试帽子长?@JaromandaX你完全正确。删除了那个代码块。
export const watchRegisterJobs = functions.database.ref(`queues/register/{$key}`).onWrite(
async (event: Event<any>) => {
if (!event.data.exists()) {
return;
}
if (event.data.exists()) {
const formData = event.data.val();
let key;
event.params&&(key=event.params.$key);
if (key) {
console.log('New user with the following id', key)
try {
await addUser(formData, key)
} catch (error) {
console.log('can not add user to database', error)
}
try {
await addOrganization(formData, key)
} catch (error) {
console.log('can not add organization to database', error)
}
try {
await event.data.ref.remove();
} catch (error) {
console.log('can not remove job')
}
return;
}
}
}
)
export const addUser = async (data, key) => {
const dataToSave = {
information: ....,
organizations: .....
};
try {
return await admin.database().ref(`users/${key}`).set(dataToSave);
} catch (error) {
return error;
}
}
export const addOrganization = async (data, key) => {
const organization = {
...
}
try {
return await admin.database().ref(`organizations/${key}`).set(organization);
} catch (error) {
return error;
}
}
export const watchRegisterJobs = functions.database.ref(`queues/register/{$key}`).onWrite(
async (event: Event<any>) => {
if (!event.data.exists()) {
return;
}
const formData = event.data.val();
let key;
if(event.params) {
key = event.params.$key;
}
if (key) {
console.log('New user with the following id', key)
try {
await addUser(formData, key)
await addOrganization(formData, key)
await event.data.ref.remove();
} catch (error) {
console.log('can not write to the database', error)
}
return;
}
}
)
export const addUser = (data, key) => {
const dataToSave = {
information: ....,
organizations: ....
};
return admin.database().ref(`users/${key}`).set(dataToSave);
}
export const addOrganization = (data, key) => {
const organization = {
...
}
return admin.database().ref(`organizations/${key}`).set(organization);
}