系统缓存学习(三)页面局部缓存
2010-11-29 21:57
232 查看
顾名思义,页面部分缓存是将页面部分内容保存在内存中以便响应用户请求,而页面其他部分内容则为动态内容。页面部分缓存的实现包括两种方式:控件缓存和替换后缓存。
1. 控件缓存(也称为片段缓存)
这种方式允许将需要缓存的信息包含在一个用户控件内,然后将该用户控件标记为可缓存的,以此来缓存页面输出的部分内容。该选项允许缓存页面中的特定内容,而没有缓存整个页面,因此,每次都需重新创建整个页。
在ASP.NET中,提供了UserControl这种用户控件的功能。一个页面可以通过多个UserControl来组成。只需要在某个或某几个UserControl里设置缓存。
示例:
在WebUserControl1.ascx的页头代码中添加声明语句:
[b]调用该控件的页面WebForm1.aspx代码:
页面的:
控件的:
这时候刷新WebForm1.aspx页面时,页面的时间每次刷新都变化,而用户控件中的时间数据却是60秒才变化一次,说明对页面的“局部”控件实现了缓存,而整个页面不受影响。
[b]2. 缓存后替换[/b]
与控件缓存正好相反。它对整个页面进行缓存,但是页中的某些片段是动态的,因此不会缓存这些片段。ASP.NET页面中既包含静态内容,又包含基于数据库数据的动态内容。静态内容通常不会发生变化。因此,对静态内容实现数据缓存是非常必要的。然而,那些基于数据的动态内容,则不同。数据库中的数据可能每时每刻都发生变化,因此,如果对动态内容也实现缓存,可能造成数据不能及时更新的问题。对此问题如果使用前文所述的控件缓存方法,显然不切实际,而且实现起来很繁琐,易于发生错误。
如何实现缓存页面的大部分内容,而不缓存页面中的局部某些片段。
ASP.NET 2.0提供了缓存后替换功能。实现该项功能可通过以下三种方法:
一是以声明方式使用Substitution控件,
二是以编程方式使用Substitution控件API,
三是以隐式方式使用控件。
前两种方法的核心是Substitution控件,第三种方法仅专注于控件内置支持的缓存后替换功能。
(1) Substitution控件应用
为提高应用程序性能,可能会缓存整个ASP.NET页面,同时,可能需要根据每个请求来更新页面上特定的部分。例如,可能要缓存页面的很大一部分,需要动态更新该页上与时间或者用户高度相关的信息。在这种情况下,推荐使用Substitution控件。Substitution控件能够指定页面输出缓存中需要以动态内容替换该控件的部分,[b]即允许对整页面进行输出缓存,然后,使用Substitution控件指定页中免于缓存的部分。需要缓存的区域只执行一次,然后从缓存读取,直至该缓存项到期或被清除。动态区域,也就是Substitution控件指定的部分,在每次请求页面时都执行。Substitution控件提供了一种缓存部分页面的简化解决方案。[/b]
示例:页面
[b]
[b][b]真实(替换)的时间:[/b]
[b]后台:[/b]
[b]public partial class WebForm2 : System.Web.UI.Page[/b]
[b]{[/b]
[b]public static string getCurrentTime(HttpContext context)[/b]
[b]{[/b]
[b]return DateTime.Now.ToString();[/b]
[b]}[/b]
[b]}[/b]
[b]如上代码所示,Substitution控件有一个重要属性:MethodName。该属性用于获取或者设置当Substitution控件执行时为回调而调用的方法名称。该方法比较特殊,必须符合以下3条标准:[/b]
[b]Ø 此方法必须被定义为静态方法;[/b]
[b]Ø 此方法必须接受HttpContext类型的参数;[/b]
[b]Ø 此方法必须返回String类型的值。[/b]
[b]在运行情况下,Substitution控件将自动调用MethodName属性所定义的方法。[b]该方法返回的字符串即为要在页面中的Substitution控件的位置上显示的内容。如果页面设置了缓存全部输出,那么在第一次请求时,该页将运行并缓存其输出。对于后续的请求,将通过缓存来完成,该页上的其他代码不会再运行。但Substitution控件及其有关方法则在每次请求时都执行,并且自动更新该控件所表示的动态内容,这样就实现了整体缓存,局部变化的替换效果。[/b][/b]
[b]随着页面的刷新,真实时间在变,而页面缓存的时间在指定的缓存时间内始终不变。[/b]
[b]
[/b]
[b](2) Substitution控件API应用[/b]
[b]是以编程方式利用Substitution控件API实现缓存后替换,相对于以声明方式使用Substitution控件的方法具有更强灵活性。[/b]
[b]通过为Substitution指定回调方法,实现和声明同样的效果。Substitution的回调方法必须是[/b]
[b]HttpResponseSubstitutionCallback委托定义的方法,它有两个特征:[/b]
[b]一是返回值必须是String,[/b]
[b]二是参数有且仅有一个,并且是HttpContext类型。[/b]
[b]当需要以编程方式,为缓存的输出响应动态生成指定的响应区域时,可以在页面代码中将某个方法(即回调方法)的名称作为参数[/b]
[b](HttpResponseSubstitutionCallback)传递给Substitution。这样Substitution就能够使用回调方法,并将回调方法的返回值作为给定位置的替代[/b]
[b]内容显示出来。需要注意的是,回调方法必须是线程安全的,可以是作为容器的页面或者用户控件中的静态方法,也可以是其他任意对象上的静态方法或实例方法。[/b]
[b]示例:页面[/b]
[/b][/b][/b]
1. 控件缓存(也称为片段缓存)
这种方式允许将需要缓存的信息包含在一个用户控件内,然后将该用户控件标记为可缓存的,以此来缓存页面输出的部分内容。该选项允许缓存页面中的特定内容,而没有缓存整个页面,因此,每次都需重新创建整个页。
在ASP.NET中,提供了UserControl这种用户控件的功能。一个页面可以通过多个UserControl来组成。只需要在某个或某几个UserControl里设置缓存。
示例:
在WebUserControl1.ascx的页头代码中添加声明语句:
[b]调用该控件的页面WebForm1.aspx代码:
页面的:
控件的:
这时候刷新WebForm1.aspx页面时,页面的时间每次刷新都变化,而用户控件中的时间数据却是60秒才变化一次,说明对页面的“局部”控件实现了缓存,而整个页面不受影响。
[b]2. 缓存后替换[/b]
与控件缓存正好相反。它对整个页面进行缓存,但是页中的某些片段是动态的,因此不会缓存这些片段。ASP.NET页面中既包含静态内容,又包含基于数据库数据的动态内容。静态内容通常不会发生变化。因此,对静态内容实现数据缓存是非常必要的。然而,那些基于数据的动态内容,则不同。数据库中的数据可能每时每刻都发生变化,因此,如果对动态内容也实现缓存,可能造成数据不能及时更新的问题。对此问题如果使用前文所述的控件缓存方法,显然不切实际,而且实现起来很繁琐,易于发生错误。
如何实现缓存页面的大部分内容,而不缓存页面中的局部某些片段。
ASP.NET 2.0提供了缓存后替换功能。实现该项功能可通过以下三种方法:
一是以声明方式使用Substitution控件,
二是以编程方式使用Substitution控件API,
三是以隐式方式使用控件。
前两种方法的核心是Substitution控件,第三种方法仅专注于控件内置支持的缓存后替换功能。
(1) Substitution控件应用
为提高应用程序性能,可能会缓存整个ASP.NET页面,同时,可能需要根据每个请求来更新页面上特定的部分。例如,可能要缓存页面的很大一部分,需要动态更新该页上与时间或者用户高度相关的信息。在这种情况下,推荐使用Substitution控件。Substitution控件能够指定页面输出缓存中需要以动态内容替换该控件的部分,[b]即允许对整页面进行输出缓存,然后,使用Substitution控件指定页中免于缓存的部分。需要缓存的区域只执行一次,然后从缓存读取,直至该缓存项到期或被清除。动态区域,也就是Substitution控件指定的部分,在每次请求页面时都执行。Substitution控件提供了一种缓存部分页面的简化解决方案。[/b]
示例:页面
[b]
[b][b]真实(替换)的时间:[/b]
[b]后台:[/b]
[b]public partial class WebForm2 : System.Web.UI.Page[/b]
[b]{[/b]
[b]public static string getCurrentTime(HttpContext context)[/b]
[b]{[/b]
[b]return DateTime.Now.ToString();[/b]
[b]}[/b]
[b]}[/b]
[b]如上代码所示,Substitution控件有一个重要属性:MethodName。该属性用于获取或者设置当Substitution控件执行时为回调而调用的方法名称。该方法比较特殊,必须符合以下3条标准:[/b]
[b]Ø 此方法必须被定义为静态方法;[/b]
[b]Ø 此方法必须接受HttpContext类型的参数;[/b]
[b]Ø 此方法必须返回String类型的值。[/b]
[b]在运行情况下,Substitution控件将自动调用MethodName属性所定义的方法。[b]该方法返回的字符串即为要在页面中的Substitution控件的位置上显示的内容。如果页面设置了缓存全部输出,那么在第一次请求时,该页将运行并缓存其输出。对于后续的请求,将通过缓存来完成,该页上的其他代码不会再运行。但Substitution控件及其有关方法则在每次请求时都执行,并且自动更新该控件所表示的动态内容,这样就实现了整体缓存,局部变化的替换效果。[/b][/b]
[b]随着页面的刷新,真实时间在变,而页面缓存的时间在指定的缓存时间内始终不变。[/b]
[b]
[/b]
[b](2) Substitution控件API应用[/b]
[b]是以编程方式利用Substitution控件API实现缓存后替换,相对于以声明方式使用Substitution控件的方法具有更强灵活性。[/b]
[b]通过为Substitution指定回调方法,实现和声明同样的效果。Substitution的回调方法必须是[/b]
[b]HttpResponseSubstitutionCallback委托定义的方法,它有两个特征:[/b]
[b]一是返回值必须是String,[/b]
[b]二是参数有且仅有一个,并且是HttpContext类型。[/b]
[b]当需要以编程方式,为缓存的输出响应动态生成指定的响应区域时,可以在页面代码中将某个方法(即回调方法)的名称作为参数[/b]
[b](HttpResponseSubstitutionCallback)传递给Substitution。这样Substitution就能够使用回调方法,并将回调方法的返回值作为给定位置的替代[/b]
[b]内容显示出来。需要注意的是,回调方法必须是线程安全的,可以是作为容器的页面或者用户控件中的静态方法,也可以是其他任意对象上的静态方法或实例方法。[/b]
[b]示例:页面[/b]
[/b][/b][/b]
相关文章推荐
- 系统缓存全解析3:页面局部缓存
- 系统缓存全解析3:页面局部缓存
- OSCache 学习(3)__缓存整个页面 & 缓存局部页面
- 系统缓存学习(二)页面输出缓存
- 系统缓存全解析3:页面局部缓存
- 【转】系统缓存全解析二:动态缓存(2)-页面局部缓存的两种方式
- 系统缓存全解析3:页面局部缓存
- OSCache 学习笔记(2)__缓存整个页面 & 缓存局部页面
- linux缓存系统学习之浏览器缓存
- PHP页面静态化学习笔记之三:使用PHP缓存机制完成静态化
- 【3】页面局部缓存
- 系统学习jQuery.核心知识.局部.jQuery操作.DOM操作.删除节点
- OScached缓存整个页面和缓存局部页面
- 系统缓存全解析(三)——页面局部缓存
- OAF学习笔记-20-在系统页面制作Tab页(系统中有Tab页,自己增加Tab)
- ASP.NET缓存技术学习入门---页面缓存(OutPut Caching)
- 【学习点滴-memcached】 分布式缓存系统 Memcached 入门
- Ehcache学习总结(3)--Ehcache 整合Spring 使用页面、对象缓存
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- PHP页面静态化学习笔记之四:简易新闻系统v1.0