2017-03-22 76 views
8

是否可以将Firebase功能的静态资产部署到Firebase托管?从Firebase功能部署到Firebase托管

用例:带有静态html文件的博客。博客内容和元信息将存储在数据库中(内容为降价)。在发布或更新时,将触发一个firebase功能,该功能解析降价并生成博客文章的静态html文件并将其部署到firebase托管。部署之后,该功能会将实时URL存储在数据库中。

这个工作流程有可能吗?在当前的文档中,我找不到有关从函数部署的任何内容。

作为一种解决方法,我可以想象使用travis-ci的设置。该函数在travis上触发重建,travis构建静态资产并将其部署到firebase托管,但这似乎是一个巨大的开销。

我也可以从数据库中提取markdown内容并在客户端上构建,但我真的很想尝试使用静态文件方法来初始化加载时间的原因。

回答

1

我一直想这样做很长一段时间,似乎与新揭幕Firebase Functions Hosting Integration ......好吧,我们仍然不能做到我们想要的。但我们可以得到关闭

如果你按照上面的文章阅读,你可以看到我们现在如何编辑firebase.json重定向一个URL指向一个firebase函数,它可以从存储在firebase中的markdown构建页面并将其提供给客户端。

事情是,这发生在每个页面的每个GET请求上。这是愚蠢的(对于像一个典型的博客一个基本静态页面)。我们希望立即可以使用即时的静态页面,而无需等待函数生成任何内容(即使这种情况非常快)。我们可以减轻由在

res.set('Cache-Control', 'public, max-age=600, s-maxage=31536000');

它会告诉浏览器缓存结果10分钟的Cache-Control头与response对象设置为任意数量众多,但CDN缓存它的年。这几乎解决了除了第一次打击之外,想要预先渲染,即时可用的页面的问题,这将导致渲染成本。另外,如果CDN确定没有足够的流量来存储它,则可以将缓存的内容逐出。

靠近。

但是我们并不是很需要的地方。假设你发布你的帖子,并在几天后,注意到一个错字?好吧,我认为你几乎被洗净了。您的缓存内容将在今年余下时间继续提供服务,除非您执行以下操作:

更改帖子的网址 - 这可能是一个坏主意,因为它会将任何搜索引擎优化和连结断开已经在野外。

可能有办法强制CDN更新,也许是通过增加“发布博客帖子”流程来在请求头中包含一个带有奇怪内容的javascript GET请求,或者有一种方法可以实现每当帖子更新时,都会有一个火力点功能。这是我卡住的地方。

Firebase使用Google的云平台CDN,其中包含Cache invalidation的机制,但我不知道这些功能可以轻松地从功能获得 - 即使它的确如此,它仍然无法解决从缓存中被逐出的问题。个人而言,我可能会使用我所描述的设置和中间长度的CDN缓存年龄限制。这胜过了我当前使用(优秀)showdown.js向客户端发送markdown并在本地渲染的方法,该方法仍然非常快,但确实需要客户端JavaScript和几个cpu周期。

希望有人会有解决这个问题的方法(或者firebase中的某个人可以将功​​能托管到下一个版本:))。如果我确定了它,我会更新我的答案。

+0

我真的不想在重建上弄乱缓存。应用程序应该尽可能简单:侦听Firebase数据库的更新,重新生成静态html,完成。尽管你的解决方案可能正在工作,但我会等待适当的整合来尝试一下。在那之前,我正在选择一个节点/快递服务器来完成交付,收听和重新编译。 – phippu