荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Arik (勇往直前), 信区: DotNET
标  题: 运用ASP.NET的输出缓冲来存储动态页面
发信站: 荔园晨风BBS站 (Mon Mar 10 08:49:47 2003), 站内信件

输出缓冲是ASP.NET一个有力的工具,它可以存储动态产生的页面响应。这样,就不必为对
相同页面的多次请求而重复执行该页面,而只是返回缓冲中的结果。输出缓冲能够运用在
两个级别—整个页面或者页面的一部分。在后一种情况中,被缓冲的那部分页面是一个嵌
入的用户控件。页面缓冲非常聪明,它能够分类存储各种不同的输出结果,例如基于请求
的URL、查询字符串或表单的POST参数,甚至是自定制的字符串。

@OutputCache命令
你可以用@OutputCache命令来声明控制资源缓冲的性能。这个命令支持一些属性,其中两
个是托管的—Duration和VaryByParam。Duration属性以秒为单位指定了系统对页面缓冲的
时间。VaryByParam属性允许根据GET查询字符串或表单的POST参数对缓冲的输出结果进行
分类。如下声明对页面缓冲一分钟,而不管是什么GET或POST参数:
<%@ OutputCache Duration="60" VaryByParam="None" %>
@OutputCache支持六个属性,它们指定了缓冲的位置、持续时间,以及用来分类页面缓冲
的参数。表A列出了这些属性。
表A
属性
 描述

Duration
 页面或用户控件被缓冲的时间,以秒记。

Location
 指定的一个合法的存储页面结果的路径。该属性值从枚举变量OutputCacheLocation中获
取,默认为Any。

VaryByCustom
 由分号隔开的一个字符串列表,用于根据用户定义字符串的浏览器类型而维护页面的各个
不同的缓冲拷贝。

VaryByHeader
 由分号隔开的一个HTTP阅读器列表。

VaryByParam
 由分号隔开的一个字符串列表,代表查询字符串的值,它们是由GET方法发送的属性或由
POST方法发送的参数。

VaryByControl
 由分号隔开的一个字符串列表,代表完全限定的用户控件属性的名称。只被用来缓冲用户
控件,而不能被用于ASP.NET页面。

上面提到过,VaryByParam属性是托管的。如果你忽略它的话,运行时就会抛出异常。Var
yByParam属性不允许用空字符串作为其值,因此如果不需以参数分类,就把该属性设置为
None。

配置输出缓冲

当一个页面的输出缓冲服务被激活时(即已经使用了@OutputCache命令),Duration属性
指出了ASP.NET系统将对该页面以HTML编译的版本缓冲的时间。以后如果有对该相同页面或
对该页面已存在的参数化版本的请求,系统将会返回缓冲的该页面的句柄。
为一个页面设置Duration属性后,ASP.NET运行时会为HTTP响应生成一个过期策略。输出结
果只会被缓冲指定的时间(秒)。在这期间,所有命中缓冲页面的请求都由输出缓冲模块
处理,而并不通过ASP.NET pipeline。
输出缓冲可以存在于不同的位置,既可以在产生请求的客户端也可以在服务器端。它还可
以在这中间的代理服务器上。表B总结了其可能存在的位置。
表B
位置
 缓冲控制
 描述

Any
 Public
 HTTP标记Expires是根据由@outputCache命令设置的持续时间来设定。一个新的项目被放
进ASP.NET Cache对象中来表示该页面的输出结果。

Client
 Private
 HTTP标记Expires是根据由@outputCache命令设置的持续时间来设定。ASP.NET Cache对象
没有加入任何项目

DownStream
 Public
 HTTP标记Expires是根据由@outputCache命令设置的持续时间来设定。ASP.NET Cache对象
没有加入任何项目。

None
 No-Cache
 HTTP标记Expires没有定义。Pragma标记被设置为No-Cache。ASP.NET Cache对象没有加入
任何项目。

Server
 No-Cache
 HTTP标记Expires没有定义。Pragma标记被设置为No-Cache。一个新的项目被放进ASP.NE
T Cache对象中来表示该页面的输出结果。

大多数的浏览器和中间代理服务器会使用任何过期信息,这些信息由Web服务器嵌入到生成
的HTML页面中。有两个HTTP 1.1标记和页面缓冲有关:Expires和Cache-Control。
HTTP Expire标记被用来指定什么时候客户端应该更新服务器上的某个页面。在这之前,任
何向浏览器发出的对该资源的请求都会由本地客户端缓存响应,而不必连接到服务器上。

当指定并没有设置为No-Cache时,HTTP 1.1 Cache-Control一般会采用public或private值
。private值使得只有浏览器才能缓存页面,而代理服务器不行。Cache-Control是HTTP 1
.1规范的一部分,只有IE 5.5或以上版本才支持。
如果你看看由ASP.NET在允许输出缓冲条件下生成的HTTP标记,你会注意到有时用到了Pra
gma标记,特别是当缓冲被设置成Server时。在这样的情况下,标记被指定为No-Cache,这
意味着在浏览器和代理服务器中都不能使用客户端缓冲。结果是,任何对该页面的访问都
要连接到服务器。准确地说,将Pragma标记设置为No-Cache只禁止了经由HTTP通道的缓冲
。如果通过非安全通道来访问页面,它实际上被缓存了但是被标记为过期的。

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 218.246.232.197]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店