什么是缓存?
当我们第一次访问网站的时候,比如 baidu.com,浏览器会把网站上的图片和数据下载到电脑上,当我们再次访问该网站的时候,网站就会从电脑中直接加载出来,这就是缓存。
缓存的好处
- 缓解服务器压力,不用每次都去请求某些数据。
- 提升性能,打开本地资源肯定会比请求服务器来的快。
- 减少带宽消耗,当我们使用缓存时,只会产生很小的网络消耗。
缓存种类
-
数据库缓存
当web应用关系复杂,数据表蹭蹭蹭往上涨时,可以将查询后的数据放到内存中进行缓存,下次再查询时,就直接从内存缓存中获取,从而提高响应速度。
-
代理服务器缓存
代理服务器缓存,和浏览器缓存性质类似,但是代理服务器缓存面向的群体更广,规模更大。它不止为一个用户服务,一般为大量用户提供服务,同一个副本会被重用多次,因此在减少响应时间和带宽使用方面很有效。
-
CDN缓存
当我们发送一个web请求时,CDN会帮我们计算去哪里得到这些内容的路径短且快。这个是由网站管理员部署的,所以ta们也可以将大家经常访问的内容放在CDN里,从而加快响应速度。
-
浏览器缓存
每个浏览器都实现了HTTP缓存,我们通过浏览器使用HTTP协议与服务器交互的时候,浏览器就会根据一套与服务器约定的规则进行缓存工作,当我们在浏览器中点击前进和后退按钮时,利用的便是浏览器的缓存机制。
缓存过程
-
强缓存
当我们访问URL时,不会向服务器发送请求,直接从缓存中读取资源,但是会返回200的状态码。
-
协商缓存
协商缓存就是强缓存失效后,浏览器携带缓存标识向服务器发送请求,由服务器根据缓存标识来决定是否使用缓存的过程。
缓存位置
-
memory cache
内存中的缓存,主要包含的是当前页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片以及操作系统缓存文件等资源大部分都会缓存在memory cache中。具体操作浏览器自动分配,看谁的资源利用率不高就分给谁。
-
disk cache
存储图像和网页等资源主要缓存在disk cache中。
-
Service Worker
是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。
-
push cache
推送缓存是 HTTP/2 中的内容,当以上三种缓存都没有命中时,它才会被使用。它只在会话(Session)中存在,一旦会话结束就被释放,并且缓存时间也很短暂,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令。
总结
-
缓存方案
HTML: 协商缓存; css、js、图片:强缓存,文件名带上hash。
-
强缓存与协商缓存的区别
2.1 强缓存不会发送请求到服务器,所以有时候资源更新了浏览器还不知道,但是协商缓存会发请求到服务器,所以资源是否更新,服务器肯定知道。
2.2 大部分web服务器都默认开启协商缓存。
-
刷新对于强缓存和协商缓存的影响
3.1 当ctrl+f5强制刷新网页时,直接从服务器加载,跳过强缓存和协商缓存。
3.2 当f5刷新网页时,跳过强缓存,但是会检查协商缓存。
3.3 浏览器地址栏中写入URL进行刷新,浏览器发现缓存中有这个文件了,不用继续请求了,直接去缓存拿。(最快)