【问题标题】:Workbox: No way to re-validate pre-cached items?Workbox:无法重新验证预缓存的项目?
【发布时间】:2020-02-21 18:58:05
【问题描述】:

我正在使用 Workbox 使 CMS 站点具有离线功能。我让服务人员安装和预缓存网站页面、资产和离线页面。问题是,使用预缓存,似乎没有办法在不修改服务工作者的情况下更新缓存。在我的例子中,它是一个 CMS,所以作者在更新站点内容时不会重新构建这个 service worker。我以为我可以只使用 StaleWhileRevalidate 策略,但令我沮丧的是,没有办法为“precacheAndRoute()”或“precache()”和“addRoute()”提供缓存策略。这似乎是 Workbox 团队的疏忽,但可以肯定的是,我希望得到任何反馈,说明如何在更新站点页面时不更改服务人员的情况下实施此解决方案。

谢谢!

【问题讨论】:

    标签: offline-caching workbox


    【解决方案1】:

    回答了我自己的问题。如果有人发现自己处于类似情况,将在此处发布。

    根据https://developers.google.com/web/tools/workbox/modules/workbox-precaching#serving_precached_responses,以下信息提示我解决方案:

    调用 precacheAndRoute() 或 addRoute() 的顺序很重要。在使用 registerRoute() 注册任何其他路由之前,您通常希望尽早在 service worker 文件中调用它。如果您确实首先调用了 registerRoute(),并且该路由匹配了传入请求,那么您在该附加路由中定义的任何策略都将用于响应,而不是 workbox-precaching 使用的缓存优先策略。

    所以我放弃了“precacheAndRoute()”而只支持“precache()”。然后我使用与这些资产匹配的 StaleWhileRevalidate 策略进行了 registerRoute()。重要的部分是将 cacheName 指定为预缓存:

    new workbox.strategies.StaleWhileRevalidate({
        cacheName: workbox.core.cacheNames.precache
    })
    

    事后看来相当简单,但文档起初并不清楚应该在 preCacheAndRoute 中构建什么。

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多