• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET性能优化之让浏览器缓存动态网页的方法

ASP.NET性能优化之让浏览器缓存动态网页的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net,c#和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定的场景下最大化地提升ASP.NET站点的性能。如果说OutputCache是从广度上提升并发效率,则浏览器缓存是从深度上提升效率。

一:HTTP头简介

1.1浏览器第一次请求

假设我们请求一个URL地址,譬如我服务器上的一个静态页面http://192.168.0.77/luminji2/html/test1.htm,会返回如下的HTTP头信息:

image

HTTP头信息中每个参数的含义这里暂且不表,我们关注和本文论述相关的3个信息:

首先,响应状态200OK,即表示从服务器上抓取数据成功。

其次,Last-Modified:Fri, 09 Sep 2011 02:56:45 GMT

这是WEB服务器在告诉浏览器,我这个文件的最后修改日期是Fri, 09 Sep 2011 02:56:45 GMT。必须要说明的是,它是GMT时间,也就是格林威治时间,一般中国境内使用的是GMT+8时区(要看系统的区域设置而定)。

最后就是Etag,WEB服务器当前响应的这个对象的标志值,就一个对象而言,比如一个 html 文件,如果被修改了,其 Etag 也会别修改。

1.2什么是浏览器缓存

我使用的是FireFox,在地址栏内敲入about:cache?device=disk,我们就会看到被浏览器缓存起来的上面这个HTML页面,如下:

image

(注意,这里的Last Modified和Http头中的Last-Modified没有任何关系)。

每种浏览器都会有自己的缓存机制,但是都差不多,这里暂且不表。

1.3如何命中缓存

再次请求刚才的URL,我们得到头信息如下:

image

可以看到状态变为304 Not Modified了,这相当于是WEB服务器告诉浏览器,请用自己的缓存,不要到我这里来下载正文内容。那么,WEB服务器是根据什么来决定这样告诉浏览器呢?

这里,我们就需要请求头信息中的If-Modified-Since。请求头是浏览器发送给WEB服务器的,一旦包含这个参数,就是浏览器跟WEB服务器说:请查看自从Fri, 09 Sep 2011 02:56:45 GMT一来,你的内容变动过没。WEB服务器就会根据这个来判断,如果没有变动过,就会给浏览器返回304 Not Modified,就像本例。这样子,浏览器就会去本地拿正文数据,减少了网络流量。

If-None-Match就是Etag判断模式,跟Last-Modified其实完成的目的是一致的,这里暂且不表。

假设我们修改了文件test1.htm,试想会是什么结果,肯定是200OK。浏览器和WEB服务器之间就是通过这种机制来完成静态网页的缓存。

二:asp.net的浏览器缓存实现

上面我们说的是静态页面的情况,那么aspx页面,也就是动态页面会是怎么样一种情况?现在,我们创建一个动态网页来看一看。先来创建一个最简单的aspx,如下:

请求一下,得到的头信息如下:

image

然后再多次请求一下,我们发现每次都是200OK,并且我们发现头信息中丢了一个很重要的信息,那就是Last-Modified。服务器没有告诉浏览器自己的对象的最后修改日期,那么浏览器就只好每次去服务器重新获取全部数据了。看到这里,我们应该明白了,要让浏览器不去拿数据,动态程序就得想法设法自己添加这个头信息。

好的,现在我们就在ASPX的后台代码中这样来实现一个最简单的头信息添加:

添加了头信息后,我们发现再次请求URL后,头信息变为如下:

image

可以欣喜滴看到,响应头中包含了Last-Modified,而请求头中则包含了If-Modified-Since。

当然,我们仍旧发现,每次请求还是200OK。这是当然了,既然头信息都是ASP.NET在后台添加的,那么我们要返回什么样的响应状态给服务器这段逻辑也得由自己来写。现在,我们假设我们要让浏览器缓存10秒的时长,其完整的代码应该如下:

经过这次修改后,如果我们在10秒内持续请求该aspx页面,则始终返回304状态,也即浏览器不会去服务器拿正文,只会在本地去读取自己的缓存,这样一来,服务器压力自然就小了。如果我们10秒内不对服务器请求这个页面,则10秒后会返回200OK,即重新到服务器拿页面数据。

现在,用AB来模拟100并发用户进行1000次请求,得到的比较结果如下(注意,为了强化效果,我们在后台需要模拟一些比较耗时的动作,比如读取数据库):

image

左边是未做缓存的aspx页面,右边是做了缓存的aspx页面,可以看到,吞吐率相差10倍之多。

提示,使用ab进行压力测试的时候,需要加入If-Modified-Since的头信息,命令如下:

C:\>ab -n1000 -c100 -H "If-Modified-Since: Friday, 09 September 2011 09:35:23 GMT" http://192.168.0.77/luminji2/aspx/test1.aspx

本文代码下载:MvcApplication320110909.rar

三:问题的提出

在上面的说到的浏览器缓存实现中,浏览器通

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11asp.net(c#)ref,out ,params的区别
  • 2017-05-11ASP.NET2.0服务器控件之自定义状态管理
  • 2017-05-11asp.net显示相同数字相乘的结果,直到数值大于150为止
  • 2017-05-11ASP.NET中下载文件的几种实例代码
  • 2017-05-11asp.net导出Excel显示中文乱码的解决方法
  • 2017-05-11asp.net更新指定记录的方法
  • 2017-05-11asp.net下让Gridview鼠标滑过光棒变色效果
  • 2017-05-11.net实现oracle数据库中获取新插入数据的id的方法
  • 2017-05-11asp.net Accee数据库连接不稳定解决方案
  • 2017-05-11jQuery调用WebService返回JSON数据及参数设置注意问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • NopCommerce架构分析(一)Autofac依赖注入类生成容器
    • .NET中JSON的序列化和反序列化的几种方式
    • asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
    • ASP.NET 窗体间传值的方法
    • ASP.net的验证控件浅析
    • ASP.NET MVC中HtmlHelper控件7个大类中各个控件使用详解
    • 使用ASP.NET.4.5.1+MVC5.0 搭建一个包含 Ninject框架 项目
    • 在asp.NET中字符串替换的五种方法第1/2页
    • 使用asp.net的pageDataSource中时索引问题解决方法
    • implicitly convert type 'int' to 'short'的原因与解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有