6.1.1 基本概念 页面输出缓存通过保存动态页面的输出内容,大大提高了服务器应用的能力。缺省情况下,输出缓存选项是被打开的,但并不是任意给定的输出响应都将被缓存,除非显示地指定页面应被缓存。 为使输出能够被缓存,输出响应至少应有一个有效的过期/有效策略以及公用cache的访问权限。当一个GET请求被送往页面,一个输出缓冲入口将被创建。接下来,对该页面的GET请求和HEAD的请求将直接从该缓冲入口中取出返回给用户,而对该页面的POST请求通常是显示地产生动态内容,却并非如同GET和HEAD请求一样从缓冲入口中取出。 输出缓存还支持带请求串的GET方法,把请求串作为页面识别的一部分。这就意味着带有相同键值但排列次序不同的请求串的GET请求,可能导致缓存中认为不存在该输出页面。 输出缓存需要知道页面缓存的过期/有效时间策略。如果一个页面在输出缓存中,而且又被指定为60分钟的页面过期时间,那么从它进入输出缓存开始,60分钟后该页面将从输出缓存中被清除。如果恰在此时,有一个对该页面的请求到达,页面的代码将被执行,页面输出又将重新进入输出缓冲。这种方式的过期策略称之为“强制过期”,页面只在一定时间内有效。 如下,我们可以用下面一条语句来显示的指出页面在输出缓冲中的保存时间。 <%@ OutputCache Duration=秒数 %> 6.1.2 实例 下面举一个简单的例子来证实ASP.NET中的页面缓存功能 在一个页加载时,我们显示它的时间,在页面过期时间(设为:10秒)到达之前,我们把页面刷新(相当于重发GET请求),看一看显示的时间;然后,在过期时间到达之后,再看显示的时间。如果,第一次和第二次显示的时间相同,那么就证明了,系统存在有页面输出缓存功能,做为对比,当过期时间到达后,新的请求将导致重新执行页面代码,产生新的时间显示。 程序源程序 <!--文件名: performance\FormPageCache.aspx--> <%@ OutputCache Duration="10" %> <!--过期时间设为10秒--> <html> <head> <title> 页面输出缓存测试 </title> </head> <script language="VB" runat="server"> Sub Page_Load(s As Object, E As EventArgs) lblTime.Text ="现在时间是:" & DateTime.Now.ToString() End Sub </script> <body > <center> <h2><font face="Verdana">测试页面输出缓存实验</font></h2> <p><p><p> <hr> </center> <asp:label id="lblTime" runat="server"/> </body> </html> 实现页面缓存的另一种方法: <%@ Import NameSpace=”System.Web.HttpCachePolicy” %> ‘指定页面输出缓存下一个10秒到期 Response.Cache.SetExpires(DateTime.Now.AddSeconds(10)) ‘指定所有用户都有对缓存的访问权力 Response.Cache.SetCacheability(HttpCacheability.Public) 如果不希望进行页面缓存,可采用Response.Cache.SetSlidingExpiration方法,当其为True时,每次页面请求到达时,相当于页面过期时间到了,就要对页面输出重新刷新 。 ‘当每次页面请求时,重置到期时间计数器,并且页面到期 Response.Cache.SetSlidingExpiration(True) 例如上面的例子可以改写成如下例子: <!--文件名:performance\FormPageCache01.aspx--> <%@ Import NameSpace="System.Web.HttpCachePolicy" %> <html> <head> <title> 页面输出缓存测试1 </title> </head> <script language="VB" runat="server"> Sub Page_Load(s As Object, E As EventArgs) response.cache.setexpires(DateTime.Now.addseconds(10)) response.cache.setcacheability(Httpcacheability.Public) lblTime.Text ="现在时间是:" & DateTime.Now.ToString() End Sub </script> <body > <center> <h2><font face="Verdana">测试页面输出缓存实验1</font></h2> <p><p><p> <hr> </center> <asp:label id="lblTime" runat="server"/> </body> </html> 输出的结果和上一例子大体相同,就不在重复了。 另外,在ASP中,对于上面的例子我们还可以写为: Response.CacheControl = "Public" Response.Expires = 10 从兼容性出发,ASP.NET中依然具有相同的效果,但建议尽量使用ASP.NET的形式。 6.1.3 小结 本章介绍了页面输出缓存的基本概念,以及在asp.net中如何通过page命令和response对象在编程中实现页面输出缓存的实现方法。
页面输出缓存 |