西皮流水DOTNET学习Blog

这是我的学习记录,欢迎您点评!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

页面输出缓存

Posted on 2005-07-30 10:18  西皮流水  阅读(471)  评论(0)    收藏  举报
在ASP.NET中有3种可由WEB程序使用的缓存:页面输出缓存(Page Output caching)、页面部分缓存(Page Fragment caching)和页面数据缓存(Page Data caching)。

页面输出缓存——是通过保存已生成的动态页面来提高请求和响应的反应速度。
一。@OutputCache指令
通过OutputCache API或@OutputCache指令来为响应指定缓冲区中的内容的有效期和建立有访问权限的公有缓存。
页面输出缓存是利用有效期来对缓冲区中的页面进行管理。即超过有效期页面就被清理出缓冲区。当用户再次请求该页面时,该页面将会被再次创建,并放入缓冲区标记上新的有效期。
@OutputCache指令格式如下:
<%@OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | None" Shared="True | False" VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parametername"%>
其中有一些属性页面输出缓存可能用不到。
1. Duration——以秒为单位,表明页或用户控件进行缓存的时间。该属性是必需的。
2. Location——指定输出缓存可以使用的场所,默认是Any。(注:在用户控件中不支持该Location属性)
     
说明
Any 输出缓存可使用所有请求,包括浏览器客户端、代理服务器或处理请求的服务器上
Client 输出缓存可使用于产生请求的浏览器客户端上
Downstream 除了源服务器,输出缓存可存储在任何HTTP1.1可缓存设备中
None 禁止使用输出缓存
Server 输出缓存可使用于处理请求的Web服务器上
ServerAndClient 输出缓存只能使用于在源服务器或发出请求的客户端中,代理服务器不能缓存响应

3.Shared——确定用户控件输出缓冲是否可以有多个页共享,默认值为False,默认行为是为包含用户控件的每一页缓存用户控件输出的一个版本。
如果将该属性设置为True,则缓存的用户控件输出可以被多个Web窗体页访问。这样可以节省大量内存。
(注:页面不支持该Shared属性)
4. VaryByCustom——根据自定义的文本改变缓冲区内容。
如果值为"browser",缓存将随浏览器名称和主要版本信息的不同而不同。
如果值是"customstring",还必须重写Global.asax中的GetVaryByCustomString方法。
5. VaryByHeader——根据HTTP头信息来改变缓冲区内容,当有多重头信息时,输出缓冲中会为每个指定的HTTP头信息保存不同的页面文档。该属性可以应用于缓冲所有HTTP/1.1的缓冲内容(不仅仅是ASP.NET缓存),(注:片段缓存和用户控件不支持此属性)
6. VaryByParam——该属性使用一个用分号分隔的字符串列表来改变使输出缓存发生变化。
这个字符串与用GET或POST方法发送的查询字符串值对应。当将该属性设置为多重参数时,对于,输出缓存都会为每个指定的参数保存其请求文档。
VaryByParam属性可能的值包括"none"、"*"和任何的查询字符串或POST参数名称。
如果不想使缓存内容随参数值发生变化,将该属性设置为"none"。
如果要使缓存内容随参数值发生变化,将该属性设置为"*"。
eg:
<%@OutputCache Duration="60" VaryByParam="state;city" % >
如果一个查询串为http://localhost/webfrom.aspx?state=beijing,这个链接中,有查询字符串"state",因此ASP.NET会对其进行缓冲。
(注:页面缓存和用户控件缓存中该属性都是必须的,除非已经在用户控件中的@OutputCache指令中包含了VaryByControl属性。如果两者都没有包含,IIS将会发生分析器错误。)
7. VaryByControl——该属性使用分号分隔的字符串列表来改变用户控件的部分输出缓存。
这个字符串中的值都是在用户控件中声明的ASP.NET服务器控件的ID属性值。
(注:在用户控件中,除非已经包含了VaryByParam属性,否则必须包括该属性。页面不支持该属性)

二。 类HttpCachePolicy——包含设置缓存特定的 HTTP 标头的方法和控制 ASP.NET 页输出缓存的方法
除了使用@OutputCache来设置缓存的有效期外,还可以通过类HttpCachePolicy来实现。
通过页面的Response.Cache对象的操作来实现对缓存有效期的修改。比如:
<%@OutputCache Duration="60" VaryByParam="none" %>
相当于:
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
类HttpCachePolicy的几个重要方法:
1. SetExpires方法——用来确定有效期的时间,参数是DataTime实例,表示过期的绝对时间。
2. SetCacheability方法——用于设置页面的Cache-Control HTTP标头,Cache-Control HTTP 标头控制在网络上缓存网页的方式,是HTML的标准定义。
SetCacheability方法的参数是HttpCacheability枚举类型的值
说明
NoCache 设置Cache-Control :no-cache标头
Private 指明请求的响应在客户端缓存,这个参数是默认的
Public 指定请求的响应能由客户端和共享(代理)缓存进行缓存
Server 指定请求的响应仅缓存在源服务器上。与NoCache选项相似。客户端接受Cache-Control :no-cache指令,但文档是在原始服务器上缓存的
ServerAndNoCache 应用Server和NoCache的设置指示在服务器上缓存内容,而对服务器以外的其他对象都显式否定其缓存响应的能力
ServerAndClient 输出缓存只能使用于在源服务器或发出请求的客户端中,代理服务器不能缓存响应
3. SetSlidingExpiration方法——将缓存过期设置为可调整
SetSlidingExpiration方法的参数是一个布尔值,当参数为真时每一次请求都会更新HTTP头Cache-Control部分,否则Cache-Control不会实时更新。
4. SetLastModified方法——将 Last-Modified HTTP 标头(表示页面的最后修改时间)设置为提供的 DateTime 值
缓存依靠它来进行计时。和SetExpires方法类似。
Response.Cache.SetLastModified(DateTime.Parse("1/1/2001 00:00:01 AM"));

 

 

 

 

<%@ OutputCache CacheProfile="PageCacheProfile" VaryByParam="*" %>
“/”应用程序中的服务器错误。
未定义“PageCacheProfile”缓存配置文件。请在配置文件中定义它。


<%@ OutputCache Duration="86400" VaryByParam="*" %>