这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战浏览器
网络层面的性能优化,使用缓存是一个最直接有效的方案。使用缓存能够减小网络 IO 消耗,提升访问速度,效果显著。所以,认识一下浏览器的缓存机制颇有必要。缓存
上图 Network 面板的截图中,咱们能够看到 size 列能够看到缓存的获取来源。性能优化
浏览器缓存机制有四个方面,它们按请求的优先级依次排列以下:服务器
Chrome 官方的缓存决策流程图markdown
其中,HTTP 缓存是最主要、最具表明性的缓存策略,咱们先来认识一下这位 HTTP 缓存机制。网络
HTTP缓存又分为强缓存和协商缓存,强缓存优先级高于协商缓存,资源没有命中强缓存,才会走协商缓存。post
Cache-Control
中配置 max-age
,max-age
设定的是相对时间长度,表示在时间长度内有效。从而规避 expires 的时差问题。Cache-Control
的 max-age
优先级高于 expires
max-age
能够视做是对 expires
的补位/替换,但若是有向下兼容的诉求,expires
仍是要的。实现性能
Last-Modified
(时间戳)返回If-Modified-Since
,值为首次请求时的 Last-Modified
的值If-Modified-Since
和资源的最后修改时间是否一致
Last-Modified
问题
Last-Modified 存在一些弊端,优化
对于上面两种场景,Last-Modified 没法正确判断资源是否变化。spa
为了解决上述问题,Etag 做为 Last-Modified 的补充出现了。
ETag
返回if-None-Match
(值为ETag
的值)弊端: Etag 生成过程须要服务器额外付出开销,影响服务端性能。