Phi*_*ler 10 firebase firebase-hosting google-cloud-functions
是否可以将firebase函数中的静态资源部署到firebase托管?
使用案例:包含静态html文件的博客.博客内容和元信息将存储在数据库中(内容为降价).在发布或更新时,将触发firebase函数,该函数解析markdown并为博客帖子生成静态html文件,并将其部署到firebase托管.部署后,该函数会将实时URL存储在数据库中.
这个工作流程是否可行?在当前的文档中,我找不到任何有关从函数部署的内容.
作为一种解决方法,我可以设想使用travis-ci进行设置.该函数触发travis上的重建,travis构建静态资产并将它们部署到firebase托管,但这似乎是一个巨大的开销.
我也可以从数据库中提取markdown内容并在客户端上构建,但我真的很想尝试静态文件方法以获得初始加载时间的原因.
小智 3
我长期以来一直想这样做,而且似乎随着新推出的Firebase Functions Hosting Integration ...好吧,我们仍然无法完全做到我们想要的。但我们可以靠近!
如果您按照上面的文章阅读,您可以看到我们现在如何编辑重定向firebase.jsonURL 以指向 Firebase 函数,该函数可以从存储在 Firebase 中的 Markdown 构建页面并将其提供给客户端。
问题是,GET每个页面的每个请求都会发生这种情况。这是愚蠢的(对于像典型博客这样的大部分静态页面)。我们希望静态页面可以立即可用,而不需要等待函数生成任何内容(即使这发生得非常快)。我们可以通过将Cache-Control标头设置为任意大的数字来缓解这种response情况,如下所示
res.set('Cache-Control', 'public, max-age=600, s-maxage=31536000');
这将告诉浏览器将结果缓存 10 分钟,但 CDN 将其缓存一年。这几乎解决了除第一次点击之外的所有页面都需要预渲染、立即可用的问题,这将产生渲染成本。此外,如果 CDN 确定没有足够的流量来保证存储它,它可以驱逐您的缓存内容。
越来越近。
但我们还没有达到我们需要达到的目标。假设您发布了帖子,几天后发现有拼写错误?嗯,我觉得你已经很疲惫了。您的缓存内容将在今年剩余时间内继续提供,除非您执行以下操作:
更改帖子的 URL - 这可能是一个坏主意,因为它会破坏任何 SEO 并破坏已经存在的页面的链接。
可能有一种方法可以强制 CDN 更新,也许可以通过增强“发布博客文章”流程来GET在请求标头中包含一个带有奇怪内容的 javascript 请求,或者也许有一种方法可以随时使用 firebase 函数来完成此操作该帖子已更新。这就是我陷入困境的地方。
Firebase 使用 Google 的云平台 CDN,其中包含缓存失效机制,但我不知道这是否可以从函数中轻松获得 - 即使可以,它仍然无法解决从缓存中逐出的问题。
就我个人而言,我可能会使用我描述的设置,其中 CDN 缓存期限为中等长度。这击败了我当前的向客户端发送 markdown 并使用(优秀的)showdown.js 在本地渲染的方法,它仍然非常快,但确实需要客户端 javascript 和一些 cpu 周期。
希望有人能解决这个问题(或者 firebase 的某个人可以将功能从托管推送到下一个版本:))。如果我确定下来,我会更新我的答案。
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |