理解浏览器的缓存机制

一、缓存位置

缓存位置分为Service Worker 、M
emory Cache、Disk Cache 和Push Cache 四种,他们都有优先级,当依次查找缓存都没有找到的时候,才会去请求服务器。

1、Service Worker

Service Worker是运行在浏览器背后的独立线程,一般可以用来实现缓存的功能。如果使用Service Worker的话,传输协议必须是HTTPS,因为Service Worker中涉及到请求拦截,所以必须用HTTPS协议来保障安全。
Service Worker的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且魂村是持续性的。
实现Service Worker缓存功能:
1:首先注册Service Worker
2:然后监听到install事件
3:缓存需要的文件
完成以上三个步骤,就可以在下次用户访问的时候,通过拦截请求的方式查询是否存在缓存,存在缓存的话就可以直接读取缓存文件,否则就去请求数据。

2、Memory Cache

Memory Cache 是内存中的缓存,主要包含的时候当前页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,科室缓存持续性很短,会碎这金城的释放而释放、一旦关闭Tab页面,内存中的缓存也就被释放了。
内存缓存在缓存资源并不关心返回资源的HTTP缓存头Cache-Control是什么值,同时资源的匹配也并非仅仅是对URL做匹配,还可能对Content-type,CORS等其他特征做校验。

3、Disk Cache

Disk Cache 是存储在硬盘中的缓存,读取速度慢,但是什么都能存储在磁盘中,容量和存储失效上比Memory Cache好。
也是所有浏览器缓存中覆盖面最大的,它会根据HTTP Herder 中的字段判断哪些资源需要存储,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。在夸站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。绝大部分的缓存都来自Disk Cache。
浏览器会把哪些文件放入内存中,哪些文件放入硬盘中呢?
1、对于大文件来说,大概率是不存储在内存中的,反之优先
2、当前系统内存使用率高的话,文件优先存储于硬盘中

4、Push Cache(推送缓存)

Push Cach是HTTP/2中的内容,当以上三种缓存都没被命中的时候才会被使用。**它只在会话中存在,一旦会话结束就被释放,并且缓存时间也很短暂,**在chrome浏览器中只有5分钟左右,同时她也并非严格执行HTTP头中的缓存指令。

二、缓存过程分析

浏览器怎么确定一个资源该不该缓存,如何去缓存呢?
答:浏览器第一次向服务器发起该请求后拿到请求结果后,将请求结构和缓存标识存入浏览器缓存,浏览器对于缓存的处理是根据第一次请求资源时返回的响应头来确定的。

在这里插入图片描述

三、缓存机制

强缓存优先于协商缓存,若强缓存生效则世界使用缓存,若不生效则进行协商缓存,协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,返回200,重新返回资源和缓存标识,再存入浏览器缓存中;生效则返回304,继续使用缓存。
在这里插入图片描述
如果缓存策略都没设置,浏览器怎么处理?
对于这种情况,浏览器会采用一个启发式的算法,通常会取响应头中的Date减去Last-Modified的值10%作为缓存时间。

四、实际场景应用缓存策略

1、频繁变动的资源:首先需要使用Cache-Control:no-cache 使浏览器每次都请求服务器,然后配合ETag或者Last-Modified 来验证资源是否有效。这样的做法虽然补鞥呢节省请求数量,但是能显著减少响应数据大小。
2、不常变的资源:给它们的 Cache-Control 配置一个很大的 max-age=31536000 (一年),这样浏览器之后请求相同的 URL 会命中强制缓存。而为了解决更新的问题,就需要在文件名(或者路径)中添加 hash, 版本号等动态字符,之后更改动态字符,从而达到更改引用 URL 的目的,让之前的强制缓存失效 (其实并未立即失效,只是不再使用了而已)

五、用户行为对浏览器缓存的影响

1、打开网页,地址栏输入地址:查找disk cache 中是否有匹配的,如果有就是用,如果没有就请求网络
2、普通刷新:因为tab页面没有关闭,因此memory caache是可以用的,会被优先使用,其次才是disk cache.
3、强制刷新(ctrl+F5):浏览器不使用缓存,因此发送请求头部带有Cache-control: no-cache,服务器直接返回200和最新的内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值