ASP.NET 2.0中的页面输出缓存
程序员文章站
2023-11-30 08:44:34
静态页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。这个过程中,缓存不需要再次经过页面处理生命周期。这样可以缩短请求响应时间...
静态页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。这个过程中,缓存不需要再次经过页面处理生命周期。这样可以缩短请求响应时间,提高应用程序性能。很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。对于那些数据经常更新的页面,则不适用。默认情况下,asp.net 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出。开发人员必须通过设置,使得某些页面的响应成为缓存的一部分。
设置页面输出缓存可以使用以下两种方式:一种是使用@ outputcache指令,另一种是使用页面输出缓存api。@ outputcache指令曾经在asp.net 1.x中出现过,并在asp.net 2.0中得到了继承和增强。页面输出缓存api主要是指httpcachepolicy类。
使用@ outputcache指令
使用@ outputcache指令,能够实现对页面输出缓存的一般性需要。@ outputcache指令在asp.net页或者页中包含的用户控件的头部声明。这种方式非常方便,只需几个简单的属性设置,就能够实现页面的输出缓存策略。@ outputcache指令声明代码如下。
cacheprofile
用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。在页面中指定此属性时,属性值必须与web.config文件<outputcachesettings>配置节下的outputcacheprofiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。
nostore
该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“response.cache.setnostore();”。
duration
用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的http响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,duration属性是必需的,否则将会引起分析器错误。
shared
该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在asp.net页中的@ outputcache指令不支持此属性。
location
用于指定输出缓存项的位置。其属性值是outputcachelocation枚举值,它们是any、client、downstream、none、server和serverandclient。默认值是any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。
sqldependency
该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:sqlcachedependency类监视输出缓存所依赖的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在sql server 2005中)与commandnotification值一起使用时,最终将使用sqldependency类向sql server 2005服务器注册查询通知。另外,sqldependency属性的commandnotification值仅在asp.net页中有效。控件只能将基于表的轮询用于@ outputcache指令。
varybycontrol
该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的asp.net服务器控件的id属性值。除非已经包含了varybyparam属性,否则在@ outputcache指令中,该属性是必需的。
varybycustom
用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在应用程序的global.asax文件中重写httpapplication.getvarybycustomstring方法。
varybyheader
该属性中包含由分号分隔的http标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本。varybyheader属性在所有http 1.1缓存中启用缓存项,而不仅限于asp.net缓存。用户控件中的@ outputcache指令不支持此属性。
varybyparam
该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用get方法属性发送的查询字符串值对应,或与用post方法发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的查询字符串或post参数名称。值得注意的是,在输出缓存asp.net页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@ outputcache指令中包含了varybycontrol属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化,则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。
下面列举了两个使用@outputcache指令的示例代码。
使用@ outputcache的示例代码1
以上示例是@ outputcache指令的基本应用,其指示页面输出缓存的有效期是100秒,并且页面不随任何get或post参数改变。在该页仍被缓存时接收到的请求由缓存数据提供服务。经过100秒后,将从缓存中移除该页数据,并随后显式处理下一个请求并再次缓存页。
使用@ outputcache的示例代码2
设置页面输出缓存可以使用以下两种方式:一种是使用@ outputcache指令,另一种是使用页面输出缓存api。@ outputcache指令曾经在asp.net 1.x中出现过,并在asp.net 2.0中得到了继承和增强。页面输出缓存api主要是指httpcachepolicy类。
使用@ outputcache指令
使用@ outputcache指令,能够实现对页面输出缓存的一般性需要。@ outputcache指令在asp.net页或者页中包含的用户控件的头部声明。这种方式非常方便,只需几个简单的属性设置,就能够实现页面的输出缓存策略。@ outputcache指令声明代码如下。
@ outputcache指令代码
<%@ outputcache cacheprofile =" " nostore= "true | false" duration ="#ofseconds" shared ="true | false" location ="any | client | downstream | server | none | serverandclient " sqldependency ="database/table name pair | commandnotification " varybycontrol ="controlname" varybycustom ="browser | customstring" varybyheader ="headers" varybyparam ="parametername" %>
如上所示,在@ outputcache指令中,共包括10个属性,它们是cacheprofile、nostore、duration、shared、location、sqldependency、varybycontrol、varybycustom、varybyheader和varybyparam。这些属性将对缓存时间、缓存项的位置、sql数据缓存依赖等各方面进行设置。下面简要介绍以上属性的基本概念。 cacheprofile
用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。在页面中指定此属性时,属性值必须与web.config文件<outputcachesettings>配置节下的outputcacheprofiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。
nostore
该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“response.cache.setnostore();”。
duration
用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的http响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,duration属性是必需的,否则将会引起分析器错误。
shared
该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在asp.net页中的@ outputcache指令不支持此属性。
location
用于指定输出缓存项的位置。其属性值是outputcachelocation枚举值,它们是any、client、downstream、none、server和serverandclient。默认值是any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@ outputcache指令不支持此属性。
sqldependency
该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:sqlcachedependency类监视输出缓存所依赖的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在sql server 2005中)与commandnotification值一起使用时,最终将使用sqldependency类向sql server 2005服务器注册查询通知。另外,sqldependency属性的commandnotification值仅在asp.net页中有效。控件只能将基于表的轮询用于@ outputcache指令。
varybycontrol
该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的asp.net服务器控件的id属性值。除非已经包含了varybyparam属性,否则在@ outputcache指令中,该属性是必需的。
varybycustom
用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在应用程序的global.asax文件中重写httpapplication.getvarybycustomstring方法。
varybyheader
该属性中包含由分号分隔的http标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本。varybyheader属性在所有http 1.1缓存中启用缓存项,而不仅限于asp.net缓存。用户控件中的@ outputcache指令不支持此属性。
varybyparam
该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用get方法属性发送的查询字符串值对应,或与用post方法发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的查询字符串或post参数名称。值得注意的是,在输出缓存asp.net页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@ outputcache指令中包含了varybycontrol属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化,则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。
下面列举了两个使用@outputcache指令的示例代码。
使用@ outputcache的示例代码1
<%@ outputcache duration="100" varybyparam="none"%>
以上示例是@ outputcache指令的基本应用,其指示页面输出缓存的有效期是100秒,并且页面不随任何get或post参数改变。在该页仍被缓存时接收到的请求由缓存数据提供服务。经过100秒后,将从缓存中移除该页数据,并随后显式处理下一个请求并再次缓存页。
使用@ outputcache的示例代码2
<%@ outputcache duration="100" varybyparam="location;firstname" %>
以上@ outputcache指令设置页面输出缓存的有效期是100秒,并且根据查询字符串参数location或者firstname来设置输出缓存。例如,假设客户端请求是“http://localhost/default.aspx?location=beijing”,那么该页面将被作为缓存处理。
静态页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。这个过程中,缓存不需要再次经过页面处理生命周期。这样可以缩短请求响应时间,提高应用程序性能。很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。对于那些数据经常更新的页面,则不适用。默认情况下,asp.net 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出。开发人员必须通过设置,使得某些页面的响应成为缓存的一部分。
设置页面输出缓存可以使用以下两种方式:一种是使用@ outputcache指令,另一种是使用页面输出缓存api。@ outputcache指令曾经在asp.net 1.x中出现过,并在asp.net 2.0中得到了继承和增强。页面输出缓存api主要是指httpcachepolicy类。
推荐阅读
-
asp.net页面中如何获取Excel表的内容
-
ASP.NET:设置页面buffer引出来的问题
-
ASP.NET 2.0中的页面输出缓存
-
ASP.NET MVC中使用jQuery时的浏览器缓存问题详解
-
php curl获取https页面内容,不直接输出返回结果的设置方法
-
在asp.net中获取当前页面的URL的方法(推荐)
-
使用ASP.NET 2.0 CSS 控件适配器生成CSS友好的HTML输出
-
ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
-
ThinkPHP3.1新特性之对页面压缩输出的支持
-
vue服务端渲染页面缓存和组件缓存的实例详解