zoukankan      html  css  js  c++  java
  • 一次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应用上有所收获

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

  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/likem/p/4110198.html
Copyright © 2011-2022 走看看