第一步 使用缓存(cache-control/expires)---------Q:如果引用的资源文件被更新了,需加载新资源,如何处理?
第二步 更新资源路径(增加版本号 ?v=1.0.1)-----Q:全部增加版本号,如果只是部分资源做了更改,浪费带宽?
第三步 路径与内容关联(
数据摘要算法 ?=与内容相关)
——————————————————————————————————————————————————————
Q:当一部分静态资源(如css),部署到了CDN上,而动态网页部署在服务器上,当静态资源和动态网页都有改动时,这次升级,是先更新CDN的内容,还是先更新服务器的内容?
A1:先部署页面,再部署资源。在部署间隔内,新资源未部署,请求旧内容,产生缓存,导致页面结构错乱
A2:先部署资源,再部署页面。在部署间隔内,有本地缓存的页面可以使用本地缓存,页面正常;没有本地缓存的页面错误。
A:将数据摘要和资源名关联(a_dkdkjgu.css),不造成覆盖,部署时先全部部署静态资源,再灰度部署动态页面,实现平滑升级。
目标:
- 配置超长时间的本地缓存 —— 节省带宽,提高性能
- 采用内容摘要作为缓存更新依据 —— 精确的缓存控制
- 静态资源CDN部署 —— 优化网络请求
- 更资源发布路径实现非覆盖式发布 —— 平滑升级
在资源关联时,要做到级联关联。例如:png图片路径更新,引起css文件更新,引起页面引用的更新,全局防止缓存。
读 知乎 问题来自http://www.zhihu.com/question/20790576中排名第一的张云龙的回答 总结