firebase - 具有 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 秒或可能更低?
谢谢!
解决方案
为了避免所谓的“冷启动”,实际上是您想要避免查看您的问题,一个好的解决方案是使用 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
用于自动缩放或instances
app.yaml文件中的手动缩放。
我认为在 GCP 中有更多的可能性,当你想避免“冷启动”时,App Engine Flex 似乎是自然的选择。
我希望它会有所帮助!
推荐阅读
- flutter - 如何在flutter dart中每3次点击显示插页式广告
- javascript - 无法通过 Github 将节点应用程序部署到 Heroku - 不运行 npm build
- r - 根据另一个因素的水平改变一个因素的水平
- python - SimpleRNN的多维输入结果效率不高
- java - 如何根据 Java 中的 PayFrequency 找到当前是哪个 PayPeriodNumber?
- python - PIP 版本 VSCode
- mysql - 通过 Workbench 制作外键约束时出错
- wordpress - 需要将所有匹配模式的 URL 重定向到另一个 url
- python - Telethon:检查客户端实例是否已登录
- javascript - 如何在ckeditor 5中获取所选文本的HTML代码?