javascript - 为什么在 Firebase 云函数中没有成功完成 Promise.all() 就退出无服务器函数时性能会下降?

标签 javascript node.js firebase asynchronous google-cloud-functions

为什么在 Firebase 云函数中没有成功完成 Promise.all() 就退出无服务器函数时性能会下降?

过去,我曾经在 Cloud Function 中运行 Promise.all() 而没有 await。 然后,这将导致 Cloud Function 退出而不等待 Promise.all() 完成。 因此,我的 Cloud Function 有时能正常工作,有时却不能。

这是个问题,所以我们将其修复为 await Promise.all() 以等待所有处理完成。

然后,过去需要几分钟才能完成的 Cloud Function,现在只需几秒钟即可完成。

我对这个问题很好奇,想了解一下。 为什么当我将所有异步进程设置为等待时,函数立即完成?

谢谢。

最佳答案

它只是 Google Cloud 的无服务器模型。您在处理流量时付费,我的意思是,在处理您的请求时付费。

当您发送响应后,您将停止付款,因此,Google 会限制您的 Cloud Functions 可用的 CPU(大约可用 CPU 的 5%)。事实上,如果您不付费,Google 会限制 CPU 并向其他处理流量并为此付费的 Cloud Function 提议处理能力。

要释放您的云函数保留的内存,一段时间后(大约 15 分钟)Google 会停止该实例。


因此,在您的情况下,如果您在处理结束之前发送响应,则处理将在后台以较低的 CPU 百分比继续进行。它要么完成,要么在实例停止之前没有时间完成;

现在,因为你await all the promises在发送响应之前,您拥有 100% 的 CPU 能力(因为您为此付费)并且您可以快速完成处理。

关于javascript - 为什么在 Firebase 云函数中没有成功完成 Promise.all() 就退出无服务器函数时性能会下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66234175/

相关文章:

javascript - 谷歌应用脚​​本: How do I pull data entered today from one spreadsheet and transpose it to another?

firebase - 仅触发一次 Firebase 云函数的最佳实践

javascript - 如果用户使用 Promise,我该如何处理 "check"?

node.js - 使用 NodeJS 的 Slack API (files.upload)

swift - (Swift) 如何正确解包可选值?身份验证后 Firebase uid 返回 nil

Android Firebase 多图上传

带有变量的 Javascript 正则表达式字符串

javascript - 如何在 C 编程中制作 typescript 模拟指针?

javascript - 如果可以使用变量为什么还要使用参数呢?

javascript - 返回 meteor 调用方法