一次HTTP请求中的缓存

From:http://www.cnblogs.com/PurpleTide/archive/2011/10/10/2205344.html

一个HTTP Request从用户点击的一瞬间,到服务器返回请求,一般会经过以下类型的缓存

(按照由客户端到服务器端的顺序)

1.浏览器端存储:

  • HTML5中的本地存储功能允许在浏览器端保存数据.
  • Flash等第三方插件也有类似的功能.
  • JavaScript保存一些数据在当前Context也算这种类型.

2.浏览器端文件缓存

  • HTTP协议中在时间未过期等情况下,不请求服务器数据而直接使用本地的文件 (请参考HTTP协议中关于缓存控制的部分)
  • 常用于html JavaScript css等文件的缓存,以减少请求次数

3.HTTP缓存304:

  • HTTP协议中,如果服务器文件未发生变化,不返回用户请求的数据,而只是返回一个304响应 (更多内容请参考HTTP协议)
  • 不减少请求数量,但是减少了响应的体积
  • 通过控制动态文件的输出内容实现缓存(可以了解一下 Etag 等相关内容)

4.服务器端文件类型缓存

  • 动态页面静态化为html文件;
  • 代理服务器, CDN等..
  • 某些不常更新的的数据静态化为文件
  • 主要是为了节省服务器资源,例如CPU

5.普通内存缓存:

  • 这是我们平时用的最多的缓存
  • 功能很强,例如.net中的Cache类按照时间等规则定时过期数据,例如缓存数据库数据

6.分布式缓存

  • 例如Memcached,现代应用程序的规模越来越大,难免用上此类方案
  • 经常通过自己分割程序实现分布式的缓存

7.数据库缓存

  • 大部分数据库都会把数据加载到内存中以提高性能

8.表现层&DOM缓存

  • 在客户端和服务器端缓冲HTML片段,(只更新需要更新的部分,如很多ajax的实现)
  • 例如jQuery中的链式表达式 (某些数据说明链式表达式会快25%)

以上涉及的部分都是可以通过开发或者配置实现控制的(有些不容易控制的缓存类型就没有提到)

此外:

  • 许多编程语言中把数据放在静态变量等成员中,其实也是一种缓存
  • 除了对于数据和文件的缓存以外,还有很多对于程序本身的缓存
  • 关于HTTP Cache部分可以查看 RFC 2616
  • 许多组件自带缓存功能,例如NHibernate,如果注意其配置可以获得不错的性能提升

按照常用程度从多到少,开发难度从容易到复杂,在开发中优先度从高到低

个人建议的顺序为 5 > 2 > 3  > 8  > 4

服务器缓存直接在代码中开发,成本低,功能强

HTTP缓存一般由服务器(IIS,apache)等内置支持,当然 也可以编程实现,也是很推荐的做法

本地存储还不够普及,在对客户端要求较高的网站中使用较多

MemCached之类的解决方案是对较大规模的网站必用的

数据库缓存是一个比较难以控制的范畴,(相比来说  优化索引和数据库设计更为有效)

同时推荐几个Tool

Fiddler  HttpWatch  用来跟踪http请求的细节

DotTrace 用来跟踪.net代码的细节

希望以上这些内容可以让各位在开发高性能web应用上有所收获

如有遗漏&谬误,还请各位高手指正

时间: 2024-10-17 02:20:13

一次HTTP请求中的缓存的相关文章

HTTP请求中浏览器缓存

本文导读:浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制.客户端缓存是否需要是可以在服务端代码上控制的.那就是响应头.响应头告诉缓存器不要保留缓存,缓存器就不会缓存相应内容:如果请求信息是需要认证或者安全加密的,相应内容也不会被缓存.那么,HTTP请求中浏览器是如何缓存数据呢? 一.HTTP请求中浏览器缓存流程图 1.浏览器第一次请求 2.浏览器再次请求时 二.HTTP请求中浏览器缓存流程的文字描述 1.当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /

HTTP请求中的缓存(cache)机制

http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line)  GET /a.html HTTP/1.1Host    127.0.0.1User-Agent  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15Accept           

HTTP请求中同步与异步有什么不同

普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕. 举个生动的例子吧: 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭.豪享博娱乐

029.ASP.Net中的缓存机制

ASP.Net中的缓存 输出缓存1. 整页缓存 缓存整个页面的输出结果 Duration 缓存时间:绝对过期 VaryByParam:依据参数值缓存,没有为None,多个用;分割 Location:缓存的位置 代码在 ftp 的 Cache目录内 2. 片段缓存 使用用户控件,将需要缓存的内容放入用户控件 指定shared=true,可以多个页面共享缓存结果 3.Substitution控件 在整页都缓存的情况下,可以部分更新内容 配置MethodName属性,对应的.cs中的方法原型是 str

HTTP请求中POST与GET的区别

本文章已收录于: 一.原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式. HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作.不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果.但是安全方法并不是什么动作都不产生

Hibernate中一级缓存和二级缓存

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质.缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期. Hibernate的缓存包括Session的缓存和SessionFactory的缓

Web请求中同步与异步的区别

普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕. 举个生动的例子吧: 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭. 所以,要

谈谈MVC项目中的缓存功能设计的相关问题

本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据库),我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据.这种机制就是所谓的缓存机制. 根据缓存的位置不同,可以区分为: 1.客户端缓存(缓存在用户的客户端,例如浏览器) 2.服务器断货(缓存在服务器中,可以缓存在内存

Http请求中Content-Type讲解以及在Spring MVC中的应用

引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在Spring MVC中如何使用它们来映射请求信息. 1.  Content-Type MediaType,即是Internet Media Type,互联网媒体类型:也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息. [html] vie