在上家公司时,有同事分享过关于缓存的知识,听完便意识到这一部分的内容是我不熟悉的,一直想着要把这块知识明白。一方面是因为公司As静态服务偶尔资源非立即更新的机制(可能是因为缓存?),另外一方面在webpack打包文件时,也会选择打包出带有hash的资源。而这些知识,隐隐中也觉得和缓存知识相关。
但自己总是不挤时间出来弄明白这块知识,在晃晃中继续开发~~如今受面试问题所扰,以及离职了时间空下来了,那就来整理整理知识。
1.缓存1.1缓存位置四种缓存位置,优先级从下往上(即如果有ServiceWorker,先查询ServiceWorker,否则查询MemoryWorker)
ServiceWorker(即使关闭浏览器,也不会消失。具体待了解)MemoryCacheDiskCachePushCache1.缓存策略强缓存:Expis、Cache-Control(命中强缓存返回状态码00)协商缓存:Last-Modified/If-Modified-Since或Etag与If-None-Match以上这些字段控制的缓存都是DiskCache
1.ServiceWorker介绍ServiceWorker的缓存与浏览器其他内建缓存机制不同,它可以让我们自由控制缓存哪些文件,如何匹配缓存,如何读取缓存,并且缓存时可持续的。
1.MemoryCache介绍即内存中的缓存,读写比DiskCache高效,但是容量更小。
一旦关闭标签页,内存中的缓存也就释放了,经过测试:第一次打开