Javascript Chrome服务工作者未拦截缓存请求

Javascript Chrome服务工作者未拦截缓存请求,javascript,google-chrome,caching,service-worker,baqend,Javascript,Google Chrome,Caching,Service Worker,Baqend,我有一个简单的测试网站,显示200张图片。它注册了一个非常简单的服务人员。HTML如下所示: <html> <style> img { width: 50px; width: 50px; float: left; padding: 5px; } </style> <head> <title>Service Worker Test</title> <script ty

我有一个简单的测试网站,显示200张图片。它注册了一个非常简单的服务人员。HTML如下所示:

<html>
<style>
  img {
    width: 50px;
    width: 50px;
    float: left;
    padding: 5px;
 }
</style>
<head>
    <title>Service Worker Test</title>
    <script type="text/javascript">
      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('sw.js');
      }
    </script>
</head>
<body>
  <div class="row">
    <img src="/img/1.jpg"/>
    <img src="/img/2.jpg"/>
    ...
    <img src="/img/200.jpg"/>
  </div>
</body>
</html>
fetching: https://service-worker-test.app.baqend.com/
fetching: https://service-worker-test.app.baqend.com/img/1.jpg
fetching: https://service-worker-test.app.baqend.com/img/2.jpg
fetching: https://service-worker-test.app.baqend.com/img/3.jpg
....
fetching: https://service-worker-test.app.baqend.com/img/200.jpg
就这样。现在chrome中的第一次加载将安装service worker。当我执行第二次加载时,服务人员将HTML请求和所有200个图像请求打印到控制台,如下所示:

<html>
<style>
  img {
    width: 50px;
    width: 50px;
    float: left;
    padding: 5px;
 }
</style>
<head>
    <title>Service Worker Test</title>
    <script type="text/javascript">
      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('sw.js');
      }
    </script>
</head>
<body>
  <div class="row">
    <img src="/img/1.jpg"/>
    <img src="/img/2.jpg"/>
    ...
    <img src="/img/200.jpg"/>
  </div>
</body>
</html>
fetching: https://service-worker-test.app.baqend.com/
fetching: https://service-worker-test.app.baqend.com/img/1.jpg
fetching: https://service-worker-test.app.baqend.com/img/2.jpg
fetching: https://service-worker-test.app.baqend.com/img/3.jpg
....
fetching: https://service-worker-test.app.baqend.com/img/200.jpg
如果我选中网络选项卡中的禁用缓存复选框,所有进一步加载执行相同的操作(确保在每次加载后清除控制台)

现在的问题是:浏览器缓存未禁用时,几次加载后,服务人员只会打印以下内容:

fetching: https://service-worker-test.app.baqend.com/
没有别的了。此外,在调试服务工作者时,在获取事件侦听器中仅处理HTML请求

我的问题是,为什么chrome中的服务工作者不能看到来自浏览器缓存的请求

顺便说一句,该代码在firefox中运行良好


我在Mac OS版本10.11.6(15G1421)上使用Chrome版本59.0.3071.86

上述行为是由Chrome渲染引擎中的内存缓存造成的。 来自内存缓存的所有请求都不会通过服务工作者,因为它们实际上不是作为请求发出的,因为它们仍然位于服务工作者之前的内存缓存中

Jake Archibald关于服务器推送的文章还说明了在请求到达服务人员之前的“映像缓存”


内存中的缓存遵循HTTP缓存语义,其作用域为当前选项卡。除了图像,它还存储样式、脚本和字体。除此之外,关于这个缓存实现的信息非常少。不过也有一些奇怪的事情:

听起来你在描述Chrome中的一个bug。在上提供详细信息可能是最好的下一步。谢谢,我做到了:我投票结束这个问题,因为这是Chrome的错误报告。