简述浏览器缓存读取规则
浏览器缓存可以优化性能,比如直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,则使用缓存从而减少响应数据。
缓存位置
Service worker
Service worker
是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。
使用Service worker
的话,传输协议必须为https
。
Memory Chche
Memory Chche
也就是内存中的内存,主要包含的说当前页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。
读取内存中的数据很高效,但是缓存持续性很短,会随着进程的释放而释放。
一旦我们关闭Tab
页面,内存中的缓存也就被释放了。
Disk Cache
Disk Cache
也就是存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比Memory Chche
胜在容量和存储时效性上。
在所有浏览器缓存中,Disk Cache
覆盖面基本上上最大的。
它会根据HTTP Header
中的字段判断哪些资源需要存储,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求,并且基本上在夸站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。
绝大部分的缓存都来自Disk Cache
。
Push Cache
Push Cache
(推送缓存)是HTTP/2
中的内容,当以上三种缓存都没有命中时,它才会被使用。
它只在会话(Session
)中存在,一旦会话结束就被释放,并且w缓存时间也很短暂(大约2分钟左右)。
缓存过程分析
浏览器与服务器通信的方式为应答模式,即是:**浏览器发起HTTP
请求 - 服务器响应应该请求。浏览器第一次向服务器发起该请求后拿到请求结果后,将请求结果和缓存表示存入浏览器缓存,浏览器对于缓存的处理上根据第一次请求资源返回的响应头来确定的。
- 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识;
- 浏览器每次拿到返回的请求结果都会将该结果和缓存表示存入浏览器缓存中;
Q.E.D.