我有一个云函数,它可以获取一些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应该与我的curl请求的time_starttransfer
进行比较。差距是什么原因造成的?这一切都与冷启动有关吗?我似乎无法用我的云功能获得低于4.6秒的总时间。根据他们共享的数据,我发送请求的服务器的正常运行时间响应相当一致,约为500ms。
我该怎么做才能将这个数字降低到接近1.5秒,或者可能更低?
谢谢!
好吧,所以我找到了方法。对于同样情况下的其他人,这里有一个解释:
我是通过Firebase介绍到谷歌云的,因此直到昨天,Firebase是我对谷歌云解决方案的全部了解。很少提及,或者至少还不够明显,来自https://firebase.google.com.
事实证明,谷歌没有1个,不是2个,而是5个不同的云计算选项。Firebase的云功能就是其中之一。还有4个。请看这里的精彩视频摘要,它介绍了5个选项中的每一个,并很好地突出了差异https://www.youtube.com/watch?v=wzPmgWJ5fpU&feature=youtu.be
因此,根据我的理解和经验,云功能是一个无服务器的解决方案,旨在与其他Firebase服务一起使用,如Firestore、Storage和Hosting。有了这些服务,功能的响应速度非常快。为了与第三方API交互,您需要使用其他4种解决方案中的一种,因为从请求到第三方api的响应时间远远超出了可接受的范围。作为指导原则,谷歌建议TTFB最长为200毫秒(https://developers.google.com/web/tools/chrome-devtools/network/understanding-resource-timing?hl=ko)。灯塔的编码TTFB阈值为600毫秒(https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/audits/time-to-first-byte.js)。不管怎样,这是一个指导方针。
就易用性而言,最接近Firebase Cloud功能的是AppEngine。https://cloud.google.com/appengine.其他解决方案允许更大的灵活性,但也需要基础设施专业知识。
AppEngine是一个无服务器解决方案,允许您专注于后端代码,并通过PAYG支付方案控制成本。
就编码经验而言,Firebase C.F的设计目的是通过onCall方法使事情变得更容易。AppEngine仍然相对易于使用,您可以很快启动并准备好后端。
无论如何,使用AppEngine,使用与OP中提到的相同的服务器请求和依赖关系(cors、compression、rp、express),我可以在1秒内获得相同的JSON数据(而使用C.F.时为4.5秒)。这是一个很大的改进,不是吗?我可能会得到更低的数字。
也就是说,有两种不同的AppEngine配置:标准和灵活。我猜,对于大多数开发人员来说,标准将是显而易见的选择。如果你选择flex,你可能想先读一读:谷歌应用程序引擎Flexible env的定价,一堂500美元的课程
从一个纯粹的谷歌客户POV来看,我仍然不确定为什么我必须使用两种不同的无服务器服务才能让我的东西正常工作,但这就是方法。
我只希望谷歌的服务能在他们的Firebase网站上得到更好的描述,这会为我节省一些宝贵的时间。多亏有人在reddit上发表评论,我才了解到AppEngine。我希望谷歌的人至少能给我指出他们的其他解决方案作为回复。
为了避免所谓的"冷启动",一个好的解决方案是使用App Engine Flex。
应用引擎是不同平台谷歌云平台(GCP)的一部分。是的,Firebase和GCP是不同的产品,尽管它们的某些部分相互重叠。Firebase旨在为移动应用程序服务,而GCP是一个完整的云解决方案。
有些特性确实是相同的。GCP项目可以配置为Firebase项目,每个Firebase项目都在GCP项目的后台。存储、Firestore和功能等解决方案在幕后都是一样的。当您在其中一个平台中创建它们时,其他平台也可以访问它们。
如果你想了解更多关于GCP和Firebase的信息,你可以阅读这篇文章。
云功能是设计中应该经常使用的解决方案,并且它们是自动缩放的。如果不使用它们,则不会将它们存储为就绪环境(缩放到0个实例)。在第一次使用之前,必须准备好环境:需要创建实例并部署功能。
为了避免"冷启动",您必须使用一种解决方案,使应用程序的至少一个实例始终处于活动状态。App Engine Flex是一个不错的选择,您可以在App.yaml文件中将最小实例数设置为1:min_num_instances
(用于自动缩放)或手动缩放中的instances
。
我认为在GCP中有更多的可能性,当你想避免"冷启动"时,App Engine Flex似乎是自然的选择。
我希望它会有所帮助!