为何删除Cache后仍可通过match方法读取缓存内容?
Cache API 删除缓存后仍能通过旧实例读取内容的原因
你遇到的这个现象是Cache API的设计特性导致的,具体原因如下:
缓存实例与存储的分离:
caches.open("test")返回的是内存中的Cache实例对象,它和浏览器缓存存储中的条目分属两个层面。调用caches.delete("test")仅删除了浏览器持久化存储里的"test"缓存条目,但已经拿到的myCache实例仍保存在内存中,且保留着之前加载的缓存数据。浏览器检查器的显示逻辑:检查器里看不到缓存,是因为它读取的是持久化存储的状态,内存中的实例数据不会在这里展示。只要
myCache实例还没被垃圾回收,它内部的缓存数据就仍可被访问。实例的独立性:如果之后再调用
caches.open("test"),会得到一个全新的空Cache实例,和之前的myCache不是同一个对象,此时调用match()会返回undefined。
你的测试代码:
var myCache = await caches.open("test"); // create a new cache await myCache.add(new Request("/index.html")); // page was sucessfully stored await caches.delete("test"); myCache.match("/index.html"); // I still read from deleted cache!
内容的提问来源于stack exchange,提问作者Jan Turoň
相关产品推荐
相关产品推荐

