ASP.NET 缓存系列----页面缓存
2013-04-11 16:21
260 查看
2.1页面输出缓存
页面输出缓存是一种使应用程序能够更快地显示更多页面的简单方法。它既没有复杂的缓存策略,也没有优异的代码设计。换句话说,它使用应用程序能够更快地显示多个页面,但是没有提高应用程序的效率和可扩展性。通过使用页面输出缓存,就可以减少服务器的工作荷载,因为页面是向下进行缓存的。2.1.1@OutPutCache指令
只需要在页面的顶部定义一个@OutPutCach指令,就可以非常容易地缓存页面输出。该指令接受一组属性,其中以下两个属性是必须的:Duration和VaryByParam。Duration属性表示系统缓存页面输出的缓存时间(单位:秒)。VaryByParam属性允许根据GET查询字符串或者POST形参,改变所要缓存的输出。不管GET和POST参数的值是多少,以下的声明语句都将页面缓存一分钟:示例2-1:
<%@OutPutCacheDuration=”60”VaryByParam=”None”%> |
表2-1@OutPutCache指令的属性
属性 | 适用对象 | 描述 |
CacheProfile | 页面 | 使用用一个页面 与Web.Config文件中指定一组输出缓存设置相关。 |
Duration | 页面和用户控件 | 页面或用户控件的缓存时间(单位:秒) |
Location | 页面 | 为存储页面的输出指定一个有效的位置。 |
NoStore | 页面 | 一个布尔值,它决定了是否阻止敏感信息的二级存储。 |
Shared | 用户控件 | 一个布尔值,确定用户控件输出是否可以由多个页共享。默认值为false。 |
SqlDependency | 页面和用户控件 | 表示一个给定SQLServer数据库中某个指定的一个依赖对象。只要修改该表的内容,就将从缓存中删除页面输出。 |
VaryByControl | 用户控件 | 一个分号分隔的字符串列表,用于更改用户控件的输出缓存。这些字符串代表用户控件中声明的ASP.NET服务器控件的ID属性值。 |
VaryByCustom | 页面和用户控件 | 表示自定义输出缓存要求任意文本。如果赋予该属性值为browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入自定义字符串,则必须在应用程序Global.asax文件重写GetVaryByCustomString |
VaryByHeader | 页面 | 分号分隔的HTTP、标头列表,用于使输出缓存发生变化。将该属性设为多标头时,对于每个指定标头组合,输出缓存都包含一个不同版本的请求文档。 |
属性 | 适用对象 | 描述 |
VaryByParam | 页面和用户控件 | 分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与随GET方法属性发送的查询字符串值对应,或与使用POST方法发送的参数对应。将该属性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。可能的值包括none、星号(*)以及任何有效的查询字符串或POST参数名称。 |
2.1.2Duration属性
Duration参数用于指定页面或者用户控件被缓存的秒数,在输出缓存中的项仅指定的时间片段内有效。一旦过了时间限制,缓存就会过期。在缓存过期之后,下一个缓存页或者缓存用户控件的请求将导致重新生成页面或者用户控件,而缓存将新的副本重新填充。在下面的示例中,使用OutPutCache指令的Duration属性把整个页面缓存3秒钟,在页面的Page_Load中使用当前时间填充Lable控件。OutPutCache指令是实现输出缓存的唯一必需的。该指令指定Duration为3秒钟。这意味着,如果在发出一个请求后3秒钟内,从服务器请求相同的页面,随后的请求将从缓存获得而不是有ASP.NET重新生成。示例2-2:
<%@PageLanguage="C#"%> <%@OutputCacheVaryByParam="None"Duration="3"%> <scriptrunat="server"> protectedvoidPage_Load(objectsender,EventArgse) { Label1.Text=DateTime.Now.ToString(); } </script> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title>无标题页</title> </head> <body> <formid="form1"runat="server"> <div> <asp:LabelID="Label1"runat="server"Text="Label"Width="228px"></asp:Label> </div> </form> </body> </html> |
2.1.3VaryByParam属性
VaryByParam参数允许根据提交给服务器的参数缓存页面的不同版本。这些参数包含的有分号分隔的字符串列表中。有两个特殊的VaryByParam参数值:表2-2VaryByParam属性的参数
值 | 说明 |
none | 不跟据参数保存不同版本 |
* | 在缓存中,为每个查询字符串值或者表单的唯一组合保存一个页面的独立版本 |
示例2-3:
<%@PageLanguage="C#"%> <%@OutputCacheDuration="60"VaryByParam="*"%> <scriptrunat="server"> protectedvoidPage_Load(objectsender,EventArgse) { lblTime.Text="页面加载时间:"+DateTime.Now.ToLongTimeString(); //获取URL“username”和“state”参数的值 lblUserName.Text=Request.Params["username"]; lblState.Text=Request.Params["state"]; } </script> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title>无标题页</title> </head> <body> <formid="form1"runat="server"> <div> <asp:LabelID="lblTime"runat="server"Text="Label"Width="130px"></asp:Label> <br/> <br/> 姓名: <asp:LabelID="lblUserName"runat="server"Text="Label"Width="97px"></asp:Label> <br/> 状态: <asp:LabelID="lblState"runat="server"Text="Label"Width="95px"></asp:Label> </div> </form> </body> </html> |
还可以设置VaryByParam作为需要用于缓存的参数。因此,可以仅根据state进行缓存,可以使用下面的OutPutCache指令:
示例2-4:
<%@OutputCacheDuration="60"VaryByParam="state"%> |
示例2-5:
<%@OutputCacheDuration="60"VaryByParam="state;city"%> |
2.1.4页面片段缓存
有时候,缓存整个页是不实际的;可能需要为每个请求动态创建页的某些部分。在这些情况下,您可能值得花时间来标识与需要大量的服务器资源来构造的页请求相关联的对象或数据。一旦标识了这些项,您就可以通过在这项技术允许您将需要花宝贵的处理器时间来创建的页的某些部分(例如数据库查询)与页的其他部分分离开。您可以选择允许为每个请求动态生成需要较少服务器资源的页的部分。
一旦标识了要缓存的页的部分,并且创建了对这些部分中的每个部分进行封装的用户控件后,您必须确定这些用户控件的缓存策略。当在代码隐藏类中创建用户控件时,您可以使用指令以声明的方式设置这些策略。或使用PartialCachingAttribute类以编程方式设置这些策略。
一下示例表述一个页面片段缓存的例子,在default.aspx中添加内容之前,须添加一个新的Web用户控件到项目中,并命名为SimpleUserControl.ascx。其内容文件如下:
示例2-6:
<%@ControlLanguage="C#"AutoEventWireup="true" CodeFile="SimpleUserControl.ascx.cs" Inherits="SimpleUserControl_ascx"%> <%@OutputCacheDuration="10"VaryByParam="*"%> <hr/> <h3>UserControl</h3> <asp:LabelID="lblTime"runat="server"/> <hr/> |
示例2-7:
usingSystem; usingSystem.Data; usingSystem.Configuration; usingSystem.Collections; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Web.UI.HtmlControls; publicpartialclassSimpleUserControl_ascx:System.Web.UI.UserControl { protectedvoidPage_Load(objectsender,EventArgse) { lblTime.Text="Thisusercontrolwasloadedat"+ DateTime.Now.ToLongTimeString(); } } |
当用户控件创建完毕后,就可以将一些内容添加到default.aspx中,包括将用户控件放在其中。
示例2-8:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default"%> <%@RegisterTagPrefix="MyUserControl"TagName="LoadTime" Src="~/SimpleUserControl.ascx"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title>FragmentCaching</title> </head> <body> <formid="form1"runat="server"> <div> <h1>FragmentCaching</h1> <asp:LabelID="lblTime"runat="server"/> <br/> <MyUserControl:LoadTimerunat="server"/> </div> </form> </body> </html> |
示例2-9:
usingSystem; usingSystem.Data; usingSystem.Configuration; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Web.UI.HtmlControls; publicpartialclass_Default:System.Web.UI.Page { protectedvoidPage_Load(objectsender,EventArgse) { lblTime.Text="Thispagewasloadedat"+ DateTime.Now.ToLongTimeString(); } } |
相关文章推荐
- asp.net 清除页面缓存,防止后退
- asp.net 中页面缓存 ,数据源缓存,自定义缓存
- ASP.NET 2.0的页面缓存功能介绍
- asp.net 2.0 缓存(页面输出缓存)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【十】——使用CacheCow和ETag缓存资源
- asp.net里如何清空页面缓存的后台代码
- Asp.net禁用页面缓存的方法总结
- ASP.NET 2.0中的页面输出缓存
- ASP.NET页面缓存技术学习
- asp.net中的缓存(一)页面输出缓存
- asp.net清除页面缓存防止同时登录
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- 在Asp.net 2.0 中禁用页面缓存解决页面刷新(重新加载数据)的问题
- 《解剖PetShop》系列之四-PetShop之ASP.NET缓存
- [转]asp.net页面缓存技术
- [Asp.net]缓存之页面缓存,控件缓存,缓存依赖
- ASP.NET清除页面缓存
- ASP.Net 页面缓存片段使用技巧
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍