除了冷启动之外,为什么 Firebase 云函数在部署后会比在模拟器中慢得多?

问题描述

我有一个 Firebase 云函数,可以解析一些 HTML 等等。我已经测量了 HTML 解析方法本身,在 MacBook Pro 上的模拟器中大约需要 300 毫秒。部署到 Firebase 时似乎需要大约 4-8 秒,这对于我的应用程序来说不是一个可以容忍的持续时间。

我正在使用 Dart 使用 firebase_functions_interop 编写我的 Firebase 云函数,并使用 Dart2JS 编译为 JS。在不同环境中表现截然不同的方法实际上是 Dart 的内置 HTML 解析方法。我知道冷启动云函数花费比预期更长的时间的常见原因,但这似乎不是这里的罪魁祸首,因为我明确地测量解析 HTML 所需的时间,这就是我看到的巨大区别。

是否可以预期云功能在生产中的运行速度会比在 MacBook Pro 上慢得多?

解决方法

部署 Firebase 云函数时,您可以自定义 runtime environment。但在这里,没有 CPU 容量。如果您查看 Cloud Function documentation directly(Firebase Cloud Functions 由 Google Cloud Functions 提供支持),您可以看到内存数量与 CPU 能力之间的相关性。

注意:4Gb 内存 = 2CPU @2.4Ghz,而不是 1 CPU(一个线程)@4.8Ghz

那么现在,使用 2Gb 内存部署您的 Firebase Cloud Function,速度应该会更好(默认为 256Mb)。但请记住这一点:Cloud Function 是单 CPU,并且限制为 2.4Ghz。你的 macbook pro 应该有 8 或 16 个 CPU,以及 3.4Ghz 的处理能力。