Chrome 85 Service Worker 一直在尝试安装

2024-03-10

在我的 Web 应用程序上更新 chrome 85 后,Service Worker 不再安装。它在 chrome 84 或更早版本、Safari、Firefox、Microsoft Edge 浏览器上运行良好。

尝试查找更改日志或错误报告,但没有明确的提示可以阻止它。等待很长时间后,服务工作人员最终出现错误 (1),在控制台中我看到许多请求处于待处理/停滞状态。

然而,那些处于挂起状态的 url 具有路径信息,而不是静态资源,例如:

对于复制:

1.Register a service worker with global scope

  navigator.serviceWorker.register('/ServiceWorker.js', { scope: '/', updateViaCache: 'none' }).then(function (registration) {
});

2. Attach install event which looks like

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open(cacheName).then(function(cache) {
      return cache.addAll(
        [
          '/css/bootstrap.css',
          '/css/main.css',
          '/js/bootstrap.min.js',
          '/js/jquery.min.js',
          '/offline.html',
          '/path/subpath/par1/par2'
          '/path/subpath/par1/par3'
          '/path/subpath1/par4/par5'
        ]
      );
    })
  );
});

3. Following request url (non static resources) will never complete and install will stuck on trying to install and eventully, in error/redudndant.

'/path/subpath/par1/par2'
'/path/subpath/par1/par3'
'/path/subpath1/par4/par5'

这是我能注意到的唯一发现。

有什么线索吗? chrome 85 Service Worker / Fetch api 中的更改可能会导致此行为。


因此,在尝试了各种方法之后,我继续查看 chromium 浏览器的源代码,发现由于某种原因,在安装 Service Worker 时默认启用请求限制,并且最多允许 3 个请求。

在我们的案例中,这种限制导致请求进入停滞状态并停留在尝试安装状态,最终导致冗余错误。

没有可用的标志来禁用限制,所以我决定使用cache.add而不是cache.addAll 处理所有的承诺,瞧,它起作用了。看来这样最大并发请求没有达到并且安装可以继续。

无法报告 chromium 上的错误,但希望一些项目成员可以研究它,至少即使他们限制了它,也可以使其恢复。

希望这暂时能帮助其他人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 85 Service Worker 一直在尝试安装 的相关文章

随机推荐