What workbox strategy is used for precached assets when using workbox-webpack-plugin?
我试图了解工作箱和服务人员。
使用workbox-webpack-plugin和GenerateSW模式时,用于预缓存资产的工作盒策略是什么? 即。 cacheFirst,staleWhileRevalidate等。因为似乎我没有为预缓存的资产设置路由/策略,以便服务工作人员更新这些资产的缓存。 那么这些的默认处理程序是什么?
其次,服务器响应中的Cache-Control标头如何在工作箱策略中刷新资产? 如果有的话。
回答根/index.html资产的问题对我最有帮助。
谢谢。
workbox-webpack-plugin生成一个服务工作者,该服务工作者使用URL数组(以及每个URL的可选修订信息)来调用workbox.precaching.precacheAndRoute([...])。
对precacheAndRoute()的调用有两件事:
如果在预缓存清单中给定条目提供了带外修订信息,Workbox将自动避免浏览器的HTTP缓存-它使用该信息作为URL内容可能随时间变化的信号。 workbox-precaching模块的文档进一步说明了正在发生的事情。
-
使用workbox-webpack-plugin时根本无法使用networkFirst策略吗?有什么理由吗?
-
如果您想要这种行为,则建议使用runtimeCaching + cache.addAll([URL列表])来"初始化"缓存。
-
@JeffPosnick我看到runtimeCached缓存的内容不能用作navigationRoute(通过navigationFallback设置)。有没有一种方法可以使用workbox-webpack-plugin,并在将策略" NetworkFirst"用于外壳程序时注册一个应用程序外壳程序?
-
并不是的。 App Shell模型的好处是能够优先提供HTML缓存。
-
@JeffPosnick感谢您的答复。自部署以来一个多星期后,我们仍然遇到问题,即用户仍然拥有旧的应用程序外壳。这就是为什么我们要使用NetworkFirst策略,并在网络超时或其他问题时回退到缓存的原因。您认为这是一个有效的用例吗?
-
您将失去缓存优先带来的性能优势,并且可能会带来负面的性能影响,除非您还启用导航预加载:developers.google.com/web/tools/workbox/modules/这就是为什么不建议将其作为导航的一部分App Shell模型。但是,如果新鲜度比性能更重要,那么可以肯定,您不必采用App Shell模型!
-
@JeffPosnick说Precache模块仅针对HTTP缓存而不是App缓存尊重目标资源缓存控制标头是否正确?示例:remote.comfoo.dat具有Cache-Control: no-store。 Precache会将其存储在App缓存中,但是HTTP缓存将跳过它。是? Docs可以对此进行更多的说明。