Angular 5 Service Worker可以在后台获取资产

时间:2018-04-04 13:54:17

标签: angular angular5 progressive-web-apps angular-pwa

我正在使用Angular 5开发渐进式网络应用程序。我们有一个CMS,可以为我们的应用程序提供原始JSON。对于包含图像的内容,JSON包含驻留在我们服务器上的图像的URL。我能够从CMS中检索所有图像的列表(或基于条件的过滤列表)。

使用fetch命令检索图像URL列表并让Service Worker提前缓存这些资产是否有意义?如果是这样,Angular 5的Service Worker实现是否可以自定义以在后台处理获取场景?或者,我是否必须创建一个手动Service Worker来获取图像资源的URL列表,然后缓存它们?

1 个答案:

答案 0 :(得分:2)

您可以使用NGSW预取或延迟加载资源explained here

您似乎对预加载资产感兴趣,并预先考虑增加的带宽和磁盘空间。如果管理得当,它肯定是一个很好的权衡,可以在运行时提供更快,更流畅的用户体验。

但是你如何在这里定义你的资产有点棘手。您的资产列表是使用JSON文件动态提取的。当有明确的调用时,SW会缓存您的资产。如果您的JSON返回图像列表,您可以使SW缓存json数据和获取JSON中的图像不是SW的典型用例,因此对于NGSW。

你仍然可以用一种不同的方法实现它。由于您的运行时决定哪些图像对用户会话/任何其他条件有效,您可以将这些资产作为prerendered html page(想到...响应)而不是JSON返回,并在主页中注入此HTML块并将可见性设置为隐藏。这使SW能够自然地缓存动态定义/派生的资产。

更新:如果您不希望将图片放入DOM中,则可以按网址显式缓存(当图片列表很大时,最好不要放入DOM)

您可以通过在SW as in herehere中添加承诺,使用某些逻辑(在您的情况下为JSON调用和响应)来展示一些特定的URL。 sw-test的文档是here,它具有在JSON响应中缓存图像URL的确切用例。