【问题标题】:How to gracefully handle PWA - Service worker End-Of-Life如何优雅地处理 PWA - Service Worker End-Of-Life
【发布时间】:2020-02-01 15:17:31
【问题描述】:

例如我们有一个 PWA 应用程序在服务器上运行了一年,现在我们计划停止服务(关闭服务器并删除 DNS 条目)

但是当我们刚刚关闭服务器时,客户端浏览器仍然会缓存 PWA,并且用户在执行操作时会看到无法访问服务器的错误消息。

我们如何才能优雅地处理这种情况?

更多详情:

  • 当新用户访问页面时(服务器停止后),没关系:他们看到This site can’t be reached
  • 之前已经访问过该页面的用户会看到过期的 PWA,这似乎已损坏,因为无法访问服务器
    • 即使用户刷新浏览器页面,他们也会看到过时的 PWA
  • 我们曾考虑将域保留一段时间并将其重定向到另一个页面,但这也无济于事(而且我们使用了 https 和 HSTS - 所以重定向不是一种选择)
  • ServiceWorker LifeCycle 没有提到生命周期结束

【问题讨论】:

    标签: service-worker progressive-web-apps


    【解决方案1】:

    可以在关闭服务器之前发布一个新的网站版本吗?
    在那里你不仅可以删除软件,还可以取消它的缓存:

    // Unregister the SW
    navigator.serviceWorker.getRegistration()
       .then(function(registration) {
           if(registration){
              registration.unregister()
              .then(
                   function(success) {
                     // if success = true, unregister was successful
                    });
              }
        });
    
    
     // Delete SW Cache
    if ('caches' in window) {
        caches.keys()
          .then(function(keyList) {
              return Promise.all(keyList.map(function(key) {
                  return caches.delete(key);
              }));
          })
    }
    

    我写了一篇关于Service Workers and caching strategies的文章,如果你想看看的话。

    当然,所有已经拥有 SW 并且在关闭门户之前不会访问您的门户的用户,仍然会使用旧版本,但我认为您没有太多控制权。


    更新

    我进一步检查了一些文档,但我找不到任何关于定时寿命的信息(甚至在MDN docs 上也没有)。因此,似乎无法在 SW 中定义时间限制。

    问题在于,一旦安装在客户端上,Service Worker 就会在其线程上独立运行。因此你无法控制它,除非让安装一个新的软件。 也许一个可能的解决方案是将当前 URL 地址重定向到一个特定的应用程序,该应用程序只允许下载新的软件(这将卸载它并删除缓存)。

    【讨论】:

    • 谢谢,这很有帮助 - 但我希望有一个替代方案,我们稍后可以关闭服务器:也许 PWA 的某个到期日期
    猜你喜欢
    • 2018-09-29
    • 2019-01-08
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多