`

【Web缓存机制概述】

 
阅读更多

转自:http://www.alloyteam.com/2012/03/web-cache-1-web-cache-overview/

====索引=====

【Web缓存机制概述】1 – Web缓存的作用与类型

【Web缓存机制概述】2 – Web浏览器的缓存机制

【Web缓存机制概述】3 – 如何构建可缓存站点

【Web缓存机制概述】4 – HTML5时代的Web缓存机制

【Web缓存机制概述】5 – Web App时代的缓存机制新思路

============

前言&摘要

这段时间的工作内容主要是为一个客户端类型的产品增加文档在线存储和文档在线预览相关特性。由于测试的同事比较细心和专业,发现了项目实现中一些效率低下的环节,比如在线预览图片没有经过压缩、重开打开同一张图片没有有效利用Web缓存等问题。而这些细节问题往往在做项目架构时,容易因为时间紧张等等因素而被忽略。虽然以前也有一些关于Web缓存的意识,但并没有很系统的了解、总结,并在项目中进行合理的运用。借此机会,整理了一些相关资料和项目的实际应用实践,做个备忘,便于在日后的项目查询和应用。

本文从Web缓存的定义、作用、分类、工作机制等方面介绍了目前常用的Web缓存及其原理,并给出如何构建有效利用Web缓存的站点。最后探讨了在HTML5和Web App、Web Game逐渐盛行的今天,现代浏览器给我们提供哪些有利于Web缓存、提高访问效率的机制,前端的代码架构又能从哪些方面进行调整,更好的利用Web缓存等问题。

什么是Web缓存

Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页。至于浏览器和网站服务器是如何标识网站页面是否更新的机制,将在后面介绍。

 

Web缓存的作用

使用Web缓存的作用其实是非常显而易见的:

减少网络带宽消耗

无论对于网站运营者或者用户,带宽都代表着金钱,过多的带宽消耗,只会便宜了网络运营商。当Web缓存副本被使用时,只会产生极小的网络流量,可以有效的降低运营成本。

降低服务器压力

给网络资源设定有效期之后,用户可以重复使用本地的缓存,减少对源服务器的请求,间接降低服务器的压力。同时,搜索引擎的爬虫机器人也能根据过期机制降低爬取的频率,也能有效降低服务器的压力。

减少网络延迟,加快页面打开速度

带宽对于个人网站运营者来说是十分重要,而对于大型的互联网公司来说,可能有时因为钱多而真的不在乎。那Web缓存还有作用吗?答案是肯定的,对于最终用户,缓存的使用能够明显加快页面打开速度,达到更好的体验。

 

Web缓存的类型

在Web应用领域,Web缓存大致可以分为以下几种类型:

数据库数据缓存

Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷。为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。比如常用的缓存方案有memcached等。  

 

服务器端缓存

 代理服务器缓存

代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见代理服务器缓存解决方案有Squid等,这里不再详述。

 CDN缓存

CDN(Content delivery networks)缓存,也叫网关缓存、反向代理缓存。CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展并获得更好的性能。浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。虽然这种架构负载均衡源服务器之间的缓存没法共享,但却拥有更好的处扩展性。从浏览器角度来看,整个CDN就是一个源服务器,从这个层面来说,本文讨论浏览器和服务器之间的缓存机制,在这种架构下同样适用。

 

浏览器端缓存

浏览器缓存根据一套与服务器约定的规则进行工作,在同一个会话过程中会检查一次并确定缓存的副本足够新。如果你浏览过程中,比如前进或后退,访问到同一个图片,这些图片可以从浏览器缓存中调出而即时显现。

 

Web应用层缓存

应用层缓存指的是从代码层面上,通过代码逻辑和缓存策略,实现对数据,页面,图片等资源的缓存,可以根据实际情况选择将数据存在文件系统或者内存中,减少数据库查询或者读写瓶颈,提高响应效率。

 

后续将从Web前端的角度讨论浏览器缓存机制、前端应用层缓存。

分享到:
评论

相关推荐

    asp.net中SqlCacheDependency缓存技术概述

    本文实例讲述了asp.net中SqlCacheDependency缓存技术,对于大型web程序设计来说具有很高的实用价值。具体如下: 对于访问量大,但更新较少的网站中使用缓存技术,可以大大提高运行效率;加上.NET 2.0提供的缓存依赖...

    PHP和MySQL Web开发第4版pdf以及源码

    7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 ...

    JSP页面缓存cache技术–浏览器缓存介绍及实现方法

    表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机制)。越上层的缓存...

    PHP和MySQL WEB开发(第4版)

    7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计...

    Java Web程序设计教程

    6.1.1拦截器工作机制 110 6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型...

    PHP和MySQL Web开发第4版

    7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 ...

    asp.net教学讲义

    6.2.2母版页运行机制 98 6.2.3 母版页的优点 100 6.3 创建母版页 100 6.4 创建内容页 102 6.5 皮肤和主题的概念 104 6.6 样式的应用 105 6.6.1 对单独页面元素使用样式 105 6.6.2 将样式移动到样式表 105 6.6.3 样式...

    HTML5程序设计(第2版).[荷]Peter Lubbers(带详细书签).pdf

    12.2.6 运行中的应用缓存 260 12.3 使用HTML5离线Web应用构建应用 261 12.3.1 创建记录资源的manifest文件 263 12.3.2 创建构成界面的HTML和CSS 264 12.3.3 创建离线JavaScript 264 12.3.4 检查application...

    2023年前端面试必备最新八股文(基础+进阶内容+持续更新)

    javascript,vue,webpack,vite,html5新特性等等,包括了面试中比较常见的BFC,v8垃圾回收机制,vite和webpack的区别,vue中遇到的问到,防抖节流,深拷贝,浅拷贝,盒子模型,作用域,闭包,浏览器缓存机制,...

    北京中科信软 Visual Basic.NET培训

    AJAX,数据缓存,个性化用户配置,Web部件,成员资格与角色管理 自定义HttpHandler与HttpModule,综合站点设计,N层架构设计 XML XMLDocument,XML Reader & Writer XML XPATH,XML XSLT,XML Schema XML & ...

    Spring.3.x企业应用开发实战(完整版).part2

    17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的...

    Spring3.x企业应用开发实战(完整版) part1

    17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的...

    asp.net技术内幕(1)

    10.3.1 创建单页面的主/明细表单 10.3.2 创建多页面的主/明细表单 10.4 小结 <br>第11章 使用DataList和DataGrid控件 <br>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 ...

    asp.net技术内幕(2)

    10.3.1 创建单页面的主/明细表单 10.3.2 创建多页面的主/明细表单 10.4 小结 <br>第11章 使用DataList和DataGrid控件 <br>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 ...

    asp.net技术内幕(5)

    10.3.1 创建单页面的主/明细表单 10.3.2 创建多页面的主/明细表单 10.4 小结 <br>第11章 使用DataList和DataGrid控件 <br>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 ...

    asp.net技术内幕(4)

    10.3.1 创建单页面的主/明细表单 10.3.2 创建多页面的主/明细表单 10.4 小结 <br>第11章 使用DataList和DataGrid控件 <br>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 ...

    asp.net技术内幕(3)

    10.3.1 创建单页面的主/明细表单 10.3.2 创建多页面的主/明细表单 10.4 小结 <br>第11章 使用DataList和DataGrid控件 <br>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 ...

    ASP.net技术内幕

    10.3.2 创建多页面的主/明细表单 10.4 小结 <br/>第11章 使用DataList和DataGrid控件 <br/>11.1 DataList和DataGrid控件概述 11.1.1 理解事件冒泡机制 11.1.2 使用模板 11.1.3 ...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个...

    weixin049校园外卖平台设计与实现+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    缓存机制:可能使用了缓存技术来提高系统性能。 演示视频与部署说明: 演示视频可能展示了平台的操作流程和界面设计。 部署说明指导用户如何将应用部署到服务器上,包括环境配置、数据库设置等。 源码介绍: ...

Global site tag (gtag.js) - Google Analytics