我正在使用Angular 5开发渐进式网络应用程序。我们有一个CMS,可以为我们的应用程序提供原始JSON。对于包含图像的内容,JSON包含驻留在我们服务器上的图像的URL。我能够从CMS中检索所有图像的列表(或基于条件的过滤列表)。
使用fetch命令检索图像URL列表并让Service Worker提前缓存这些资产是否有意义?如果是这样,Angular 5的Service Worker实现是否可以自定义以在后台处理获取场景?或者,我是否必须创建一个手动Service Worker来获取图像资源的URL列表,然后缓存它们?
答案 0 :(得分:2)
您可以使用NGSW预取或延迟加载资源explained here。
您似乎对预加载资产感兴趣,并预先考虑增加的带宽和磁盘空间。如果管理得当,它肯定是一个很好的权衡,可以在运行时提供更快,更流畅的用户体验。
但是你如何在这里定义你的资产有点棘手。您的资产列表是使用JSON文件动态提取的。当有明确的调用时,SW会缓存您的资产。如果您的JSON返回图像列表,您可以使SW缓存json数据和获取JSON中的图像不是SW的典型用例,因此对于NGSW。
你仍然可以用一种不同的方法实现它。由于您的运行时决定哪些图像对用户会话/任何其他条件有效,您可以将这些资产作为prerendered html page(想到...响应)而不是JSON返回,并在主页中注入此HTML块并将可见性设置为隐藏。这使SW能够自然地缓存动态定义/派生的资产。
更新:如果您不希望将图片放入DOM中,则可以按网址显式缓存(当图片列表很大时,最好不要放入DOM)
您可以通过在SW as in here和here中添加承诺,使用某些逻辑(在您的情况下为JSON调用和响应)来展示一些特定的URL。 sw-test的文档是here,它具有在JSON响应中缓存图像URL的确切用例。