一次HTTP请求中几个阶段的缓存
日期:2011-10-10 阅读:40 分类:综合信息
一个HTTP Request从用户点击的一瞬间,到服务器返回请求,一般会经过以下类型的缓存
(按照由客户端到服务器端的顺序)
1.浏览器端存储:
- HTML5中的本地存储功能允许在浏览器端保存数据.
- Flash等第三方插件也有类似的功能.
- JavaScript保存一些数据在当前Context也算这种类型.
2.浏览器端文件缓存
- HTTP协议中在时间未过期等情况下,不请求服务器数据而直接使用本地的文件 (请参考HTTP协议中关于缓存控制的部分)
- 常用于html JavaScript css等文件的缓存,以减少请求次数
3.HTTP缓存302:
- HTTP协议中,如果服务器文件未发生变化,不返回用户请求的数据,而只是返回一个302响应 (更多内容请参考HTTP协议)
- 不减少请求数量,但是减少了响应的体积
- 通过控制动态文件的输出内容实现缓存(可以了解一下 Etag 等相关内容)
4.服务器端文件类型缓存
- 动态页面静态化为html文件;
- CDN;
- 某些不常更新的的数据静态化为文件
- 主要是为了节省服务器资源,例如CPU
5.普通内存缓存:
- 这是我们平时用的最多的缓存
- 功能很强,例如.net中的Cache类按照时间等规则定时过期数据,例如缓存数据库数据
6.分布式缓存
- 例如Memcached,现代应用程序的规模越来越大,难免用上此类方案
- 经常通过自己分割程序实现分布式的缓存
7.数据库缓存
- 大部分数据库都会把数据加载到内存中以提高性能
8.表现层&DOM缓存
- 在客户端和服务器端缓冲HTML片段,(只更新需要更新的部分,如很多ajax的实现)
- 例如jQuery中的链式表达式 (某些数据说明链式表达式会快25%)
以上涉及的部分都是可以通过开发或者配置实现控制的(有些不容易控制的缓存类型就没有提到)
此外:
- 许多编程语言中把数据放在静态变量等成员中,其实也是一种缓存
- 除了对于数据和文件的缓存以外,还有很多对于程序本身的缓存
- 关于HTTP Cache部分可以查看 RFC 2616
- 许多组件自带缓存功能,例如NHibernate,如果注意其配置可以获得不错的性能提升
相关文章
- http协议规范 2008-12-25
- flex中HTTPService乱码解决 2009-01-19
- http协议规范(PDF) 2008-12-11
- Java中HttpClient超时设置 2011-11-14
- xmlhttp参考手册 2008-12-11
- 解决microsoft.xmlhttp的缓存问题 2010-06-26
- 服务器网页缓存的深入分析 2009-06-15
- 一个Java拦截器用于做缓存的例子 2012-03-31