一次HTTP请求中有哪些地方可以缓存

Web开发的各种缓存
服务器君一共花费了1531.935 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

一个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应用上有所收获。

本文地址:http://www.nowamagic.net/librarys/veda/detail/162,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/162

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《Python在Unix和Linux系统管理中的应用》 Noab Gift (作者), Jeremy M.Jones (作者)

《Python在Unix和Linux系统管理中的应用(影印版)》作者们还构建了一个可以免费下载的Ubuntu虚拟机。该虚拟机包含了这《Python在Unix和Linux系统管理中的应用(影印版)》的源代码,还可以用来运行书中的实例,包括SNMP、IPython、SQLAlchemy和许多其他工具。《Python在Unix和Linux系统管理中的应用》展示了Python语言如何提供一种更加高效的方式来处理Unix和Linux服务器管理工作中的各种任务。《Python在Unix和Linux系统管理中的应用(影印版)》的每一章都会提出一个特定的管理问题,例如并发或数据备份,然后通过实际的例子提供基于Python的解决方案。

更多计算机宝库...