• 一次HTTP请求中的缓存


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

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

  • 相关阅读:
    读取lotus85邮箱未读文档
    Lotus notes 通讯录的导入导出
    如果你发现vpuserinfo.nsf数据库损坏,如何修复?该数据
    如何从iNotes获得未读邮件数量
    NTKO文档控件常见报错信息集合
    页面缓存清除的方法
    通过Lotusscript代码从损坏的数据库中抽取数据
    如何将lotus 通讯簿导入到outlook 2003中
    怎样使用Lotus Domino实用程序(Updall, Compact, Fixup) 进行正常和异常维护。
    0301.Lotus Domino与Windows AD帐户同步和SSO
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2205344.html
Copyright © 2020-2023  润新知