热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一个HTTPRequest从用户点击的一瞬间,到服务器返回请求,一般会经过以下类型的缓存(按照由客户端到服务器端的顺序)。浏览器端存储:HTML5中的本地存储功能允许在浏览器端保存数据。服务器缓存直接在代码中开发,成本低,功能强。HTTP缓存一般由服务器(IIS,apache)等内置支持,当然也可以编程实现,也是很推荐

一个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,欢迎访问原出处。


推荐阅读
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • Iwouldliketobeabletohaveasidebarthatcanbetoggledinandoutonabuttonpress.However ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 本文介绍了使用jQuery实现图片预加载和等比例缩放的方法,同时提供了演示和相关代码。该方法可以重置图片的宽度和高度,并使图片在水平和垂直方向上居中显示。 ... [详细]
  • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
    本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
author-avatar
手机用户2702937647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有