首页 > 解决方案 > 具有 Firebase 云功能的高 TTFB

问题描述

我有一个获取一些 JSON 数据的云函数。这就是它所做的一切。我遵循了此视频中突出显示的提示:https ://www.youtube.com/watch?v=IOXrwFqR6kY

所以,我有 cors 和 rp 依赖项,在我的功能之外没有任何东西。数据被压缩(我认为这是默认功能)。Chrome 开发工具显示数据已被 gzip 压缩。压缩后为 37KB。开发工具一致表明 TTFB 约为 4.5 秒。内容下载时间仅为 7.8 毫秒左右。

如果我从本地机器对相同的 json 数据发出 curl 请求,我会得到以下信息:

    time_namelookup:  0.028s
       time_connect:  0.225s
    time_appconnect:  0.921s
   time_pretransfer:  0.921s
      time_redirect:  0.000s
 time_starttransfer:  1.574s
                    ----------
         time_total:  1.576s

似乎有很大的差距。如果我没记错的话,应该将 TTFB 与time_starttransfer我的 curl 请求进行比较。差距是什么原因造成的?这一切都与冷启动有关吗?我的云功能似乎总不能低于 4.6 秒。根据他们共享的数据,我向其发送请求的服务器的正常运行时间响应相当一致,约为 500 毫秒。

我该怎么做才能将该数字降低到接近 1.5 秒或可能更低?

谢谢!

标签: firebasegoogle-cloud-functions

解决方案


为了避免所谓的“冷启动”,实际上是您想要避免查看您的问题,一个好的解决方案是使用 App Engine Flex。

App Engine 是不同平台 Google Cloud Platform (GCP) 的一部分。是的,Firebase 和 GCP 是不同的产品,尽管它们的某些部分相互重叠。Firebase 旨在用于移动应用,而 GCP 是完整的云解决方案。

有些功能确实是一样的。GCP 项目可以配置为 Firebase 项目,并且每个 Firebase 项目都在后台 GCP 项目中。Storage、Firesore 和 Functions 等解决方案在幕后是相同的。当您在其中一个平台上创建它们时,它们也可以从另一个平台访问。

如果您想了解有关 GCP 和 Firebase 的更多信息,可以阅读内容。

Cloud Functions 是设计上应该经常使用的解决方案,并且它们会自动扩展。如果不使用它们,则不会将它们存储为就绪环境(缩放到 0 个实例)。在第一次使用之前,必须准备好环境:需要创建实例并部署功能。

为了避免“冷启动”,您必须使用一种解决方案,让您的应用程序的至少一个实例始终处于活动状态。App Engine Flex 是不错的选择,您可以在其中将最小实例数设置为 1:min_num_instances用于自动缩放或instancesapp.yaml文件中的手动缩放。

我认为在 GCP 中有更多的可能性,当你想避免“冷启动”时,App Engine Flex 似乎是自然的选择。

我希望它会有所帮助!


推荐阅读