1. 按缓存位置区分:
- service worker :浏览器背后的独立线程,可以用来实现缓存。service worker 中涉及请求拦截,所以必须使用https协议来保障安全。service worker 的缓存与浏览器其他内建机制不一样,可以自由控制缓存文件,何如匹配,如何读取文件,缓存是持续性的;
- Memory Cache : 内存缓存。高效,不持续,容量小;随着Tab页的关闭,缓存自动释放;其中preloader相关指令可以一边解析js/css文件一边网络请求下一个资源;小文件大概率存在内存中;
- Disk Cache:硬盘缓存。没有Memory Cache高效,但容量大,存储时效长;缓存内容由Http Header中字段判断;大文件大概率存储在硬盘中。
- Push Cache:推送缓存,只存在于会话(session)阶段,会话结束,缓存自动释放,缓存时间短;缓存优先级最低。
2. 缓存策略:通过设置Http Header实现
- 强缓存:设置过期时间实现;在过期时间内,客户端再次请求时,缓存则返回缓存中数据,超过过期时间,则再次向服务器发起请求。
- 协商缓存:强缓存失效后,发起请求,由服务器判断请求内容是否有更新,没有更新,则返回304状态码,告知客户端可以使用缓存的数据,若数据已经更新,服务器返回新数据。
3. 用户行为:页面操作
- 输入网址:查找Disk Cache中是否有匹配,没有则发起请求;
- F5刷新:因Tab页为关闭,优先在Memory Cache中匹配,然后再在Disk Cahce中,没有再发起请求;
- ctrl+F5强制刷新:不使用缓存,请求头步带有no-cache