从存储位置看,浏览器缓存分为哪几种?
分为4种:
- Service Worker(线程缓存)
- Memory Cache(内存缓存)
- Disk Cache(硬盘缓存)
- Push Cache(推送缓存)
Service Worker
定义:运行在浏览器背后的独立线程,一般可以用来实现缓存功能。
注意:使用Service Worker的话,传输协议必须为HTTPS
功能:控制缓存哪些文件,如何匹配缓存、如何读取缓存,并且缓存是持续性的。
实现缓存功能三个步骤:
- 实现需要注册Service Worker
- 然后监听install事件以后就可以拦截请求的方式查询是否缓存,存在缓存的话就可以直接读取缓存文件,否则就求请求数据。
- 当Service Worker没有命中缓存的时候,我们需要去调用fetch函数去获取数据。也就是说,如果我们没有在Service Worker命中缓存的话,会根据缓存查找优先级去查找数据,浏览器会显示我们是从Service Worker中获取的内容。
Memory Cache
定义:内存中的缓存,主要包含当前页面中已经抓取到的资源,例如页面上已经下载的样式、脚本,图片等。
注意:我们一旦关闭Tab页面,内存中的缓存也就被释放。且不会关心HTTP缓存头Cache-Control是什么值。
Disk Cache
定义:缓存在硬盘中的缓存,读取速度慢点,但什么都能存储到磁盘中,比之Memory Cache 胜在容量和存储时效性上。
注意:它会根据HTTP Header中的字段判断哪些资源需要缓存,哪资源不请求直接使用,哪些资源已经过期需要重新请求。
Push Cache
定义:Push Cache(推送缓存)是HTTP/2的内容,当以上三种缓存都没有命中时,它会被使用。它只会在会话(Seesion)中存在,一旦会话结束就会被释放,并且缓存时间很短暂,在谷歌浏览器只有5分钟左右。
特性:
- 所有的资源都能被推送,并且能够被缓存
- Push Cache中的缓存只能被使用一次
- 可以推送其它域名资源
- 浏览器可以拒绝接受已经存在的资源推送
- 一旦关闭,Push Cache就会被释放
- 可以推送到no-cache 和 no-store的资源