为什么serviceWorker通过fetch获取的资源,会得到上一个版本的资源?

问题描述

我在使用serviceWorker管理缓存,套路很一般,首先在active事件删除以前版本缓存,然后在fetch事件缓存新版本资源。
在sw激活之前,已经删除了旧版cache。
正常情况应该是新版本的cache里面的缓存文件的时间晚于cache的创建时间,并且获取的都是新版本的文件。
但是问题出现了:新版本的cacheStorage里面居然有上一个版本的资源,导致页面逻辑出现问题
这个问题不是必现,只是偶尔会出现。

浏览器版本: chrome 76.0.3809.132 (正式版本) (64 位)
相关代码:
图片描述

问题图片:
图片描述

你期待的结果是什么?实际看到的错误信息又是什么?

可以看到,cache的创建时间是2019.09.12 14:30。
并且旧版本的cache在激活前已经删除。
然后通过网络请求然后缓存资源,正常情况下资源的缓存时间是晚于cache的创建时间的。

但是实际情况是,部分资源任然是旧版sw里面的资源
虽然这个问题不是必现,但是一出现就会导致新版和旧版共同存在,导致页面逻辑出错误。
请问各位大佬,到底哪里出现了问题?

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题