目录

Duration与CacheProfile属性

Duration:页或用户控件进行缓存的时间(以秒计)。在页或用户控件上设置该特性为来自对象的 HTTP 响应建立了一个过期策略,并将自动缓存页或用户控件输出。

CacheProfile:与该页关联的缓存设置的名称。这是可选特性,默认值为空字符串 ("")。

测试OutputCache准备

在Visual Studio中,新建website项目,并修改页面信息如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %>
</div>
</form>
</body>
</html>

打开 Fiddler 工具,在浏览器中打开页面,我们可以看到 Fiddler 跟踪到的响应信息如下:

并且每次刷新Fiddler所返回的状态码都是200,而且页面输出时间在不断变化,如下:

我们修改项目,在website下的Web.config文件中添加如下配置:

  <system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<!--name 缓存配置名称
duration 缓存的时间(以秒计)
enabled 指定缓存有效
-->
<add name="outputCache60" duration="60" enabled="true" varyByParam="*" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<compilation debug="true"/>
</system.web>

并修改页面信息为,增加 <%@ OutputCache CacheProfile="outputCache60"  %>:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ OutputCache CacheProfile="outputCache60" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=DateTime.Now %>
</div>
</form>
</body>
</html>

同样利用 Fiddler 跟踪,得到的信息如下:

我们可以看到 Response Heades 所返回的Cache与不加缓存时返回的完全不一样(多了 Date 和 Expires 节点),加缓存后的时间范围与配置文件中时间一致,相差60秒(duration="60")。

加缓存后,第一次数据请求的状态为200,而之后请求返回的状态都是304,而且页面所输出的时间一直未变。 (超过60秒后第一次刷新,时间会变化,且状态变为200)

HTTP 304: Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

VaryByParam属性

分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串对应于使用 GET 方法特性发送的查询字符串值,或者使用 POST 方法发送的参数。将该特性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。

可能的值包括 none、星号 (*) 以及任何有效的查询字符串或 POST 参数名称。

varyByParam="none" 当 VaryByParam 设置为 none 时,将不考虑任何参数;无论提供什么附加参数,都将向所有用户发送相同的页:

下面是Fiddler跟踪的信息:

可以看到,参数改变时数据请求都是200(第二次为304),但是页面上的数据则全是相同的副本,如下:

VaryByParam =“*”对于每个唯一的请求参数组合,将缓存一个唯一页

如图中所示,不管所传的参数为id,code还是para 只要值有所变化时,就会请求服务器,不会读取缓存数据(需要注意的是资源文件如img,js,css等还是会走缓存的)

而且其页面上的数值也是变化的,如下:

但是,将 VaryByParam 设置为 * 会缓存页的许多不同版本,所以如果您知道缓存变化所依据的参数,建议您在 VaryByParam 特性中显式指定这些参数。

如 varyByParam="id;code" 或者  varyByParam="id" 表示当 id;code 或者 id 参数变化时,发生给客户端不同页。

我这边配置文件修改为

 <add name="outputCache60" duration="60" enabled="true" varyByParam="id;code" />

Fiddler跟踪的信息如下:

参数改变都会当成一个新的数据请求,但是返回给客户端的数据则不同,如下:

id和code变化时,输出内容会随参数变化,但para无论参数怎么变化,输出的结果都是一样的。

该章只是简单介绍了Duration,CacheProfile,VaryByParam属性 ,如有错误或者问题请各路大神指正!

作者:释迦苦僧   出处:http://www.cnblogs.com/woxpp/p/3975209.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

OutputCache属性详解(一)一Duration、VaryByParam的更多相关文章

  1. OutputCache属性详解(二)一 Location

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  2. OutputCache属性详解(三)— VaryByHeader,VaryByCustom

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  3. OutputCache属性详解(四)— SqlDependency

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  4. [置顶] MVC输出缓存(OutputCache参数详解)

    1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...

  5. MVC输出缓存(OutputCache参数详解)

    版权声明:本文为博主原创文章,未经博主允许转载随意. https://blog.csdn.net/kebi007/article/details/59199115 1.学习之前你应该知道这些 几乎每个 ...

  6. css动画-animation各个属性详解(转)

    CSS3的animation很容易就能实现各种酷炫的动画,虽然看到别人的成果图会觉得很难,但是如果掌握好各种动画属性,做好酷炫吊炸天的动画都不在话下,好,切入正题. 一.动画属性: 动画属性包括:①a ...

  7. android:exported 属性详解

    属性详解 标签: android 2015-06-11 17:47 27940人阅读 评论(7) 收藏 举报 分类: Android(95) 项目点滴(25) 昨天在用360扫描应用漏洞时,扫描结果, ...

  8. WPF依赖属性详解

    WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...

  9. HTML video 视频标签全属性详解

    HTML 5 video 视频标签全属性详解   现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...

随机推荐

  1. css3动画之图片旋转

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. Sublime无法使用package control安装插件

    我之前想通过安装sftp,但是出现了这个问题,百度了很久才解决.东西也是从网上找的,现总结下:   网上说什么安装个新的,我也是简直醉了,其实新的并不好使. 但是,我们最好安装个新的,再继续下面的操作 ...

  3. cherry Tree的严重漏洞

    Cherry Tree程序员笔记软件存在严重漏洞 如果你用Cherry Tree来保存自己觉得很重要的东西的时候,你应该注意了 显示漏洞的步骤:(不用使用自己使用Cherry Tree保存的文件来做下 ...

  4. DOM基础

    DOM(Document Object Model)即文档对象模型,针对HTML 和XML 文档的API(应用程序接口).DOM 描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某一部分. ...

  5. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

  6. uva 11174 Stand in a Line

    // uva 11174 Stand in a Line // // 题目大意: // // 村子有n个村民,有多少种方法,使村民排成一条线 // 使得没有人站在他父亲的前面. // // 解题思路: ...

  7. 安卓模拟器的报错This AVD's configuration is missing a kernel file!!

    安卓模拟器的报错: 可能的原因是target设置问题:

  8. Activity调用静态方法改变UI,使用Handler来改变UI显示

    本人菜鸟,请各位多多指点,不足之处,请斧正.没啥技术含量,就权当丰富下mono for android的小代码. Activity调用静态方法改变UI using System; using Andr ...

  9. angularjs 表单验证(不完整版)

    针对项目实践表单验证总结: angular 的 form表单验证:form内需要novalidate取消默认验证,用ng自己的验证,form的名字是非常必要的 栗子:以注册为栗子,下面是注册的部分: ...

  10. springMVC注解启用及优化

    使用注解的原因 最方便的还是启用注解 注解方便,而且项目中很流行. 配置文件尽量减少,主要使用注解方式. Springmvc的注解是在2.5版本后有了注解,如何开启注解配置文件 Web.xml文件中不 ...