为了合理的加速页面展示,肯定会用到缓存(避免每次资源请求,或者请求返回请求内容),加快页面非首次展示的速度,目前通用的策略是:
不强缓存入口资源即html文件,其他资源强缓存的时间足够长(几个月或者几年都可以),非入口文件的更新采用更改文件名的方式
这样每次资源的更改,便资源名发生改动(资源内容的MD5),也就是请求新的资源,然后强缓存足够长时间,后面不更新就只在缓存中拿资源即可,都不用每次与服务端建立连接,再传输资源内容。
补充:
- 更新缓存历史中,出现过用时间戳的方式,这样其实有一定的更新风险,如下
- 发生风险的时机在于更新线上资源的时候,同时访问了页面,由于各个资源有依赖关系,如果先发布了引用其他资源的资源,而后才更新依赖的资源,便出现了问题
- 如
index.html
中引入了index.js?t=1
,发布资源过程先发布了index.html
,同时新的index.html
已被用户客户端请求到,然后请求里面的index.js?t=2
,而此时如果线上发布还没有发布到index.js
(发布也需要时间),这样返回的仍旧是老的index.js?t=1
所加载的index.js
,即客户端拿到的是老的index.js
,如此就出问题提啦!!!
- 强缓存(expired, cache-controle),协商缓存(last-modified/If-Modified-Since,Etag/If-None-Match),这部分后面说明....