缓存整个页面

Posted 姚小丹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存整个页面相关的知识,希望对你有一定的参考价值。

3.2.3 缓存整个页面

在一些大型门户系统中,访问量特别大,可能每分钟就会有上千次的访问。而且通常门户系统的首页非常复杂,项目特别多,每一次访问都需要多次操作数据库。这对服务器的性能是个很大的考验。

但是我们发现通常服务器首页更新的频率不是非常快。所以,完全可以让服务器的首页缓存起来,过一段时间再更新。这样服务器就不用每次请求都重新读取数据库并生成页面了。

刚好,ASP.NET为我们提供了一个@OutputCache指令,我们只要在需要缓存数据的页面使用该指令,即可实现对整个页面进行缓存。 视频教学:光盘/videos/3/OutputCacheCommand.avi 长度:6分钟

1. 基础知识——@OutputCache指令

@OutputCache指令用于以声明的方式控制ASP.NET页或页中包含的用户控件的输出缓存策略。格式如下:

  1. <%@ OutputCache Duration="5" VaryByControl="none" %

这行语句的意思是无条件地为该页缓存5秒钟。

@OutputCache指令的属性如表3-6所示。

表3-6 @OutputCache指令属性

技术分享 

在@OutputCache指令的所有属性中,其中Duration和VaryByParam属性是必选的属性。

2. 实例描述

为了方便,这里我们就不再模拟一个大型门户系统了。

我们只在页面上打印当前时间,并让页面每秒钟刷新一次。这样的话,每一次刷新打印的时间都会不一样。

在这个前提下我们将该页面缓存5秒,如果缓存成功,则5秒内页面数据不会变化,在第6秒时才更改为新的时间值。

3. 实例应用

【例3-3】缓存整个页面。

(1) 打开上节使用的项目,创建一个新的Web窗体,命名为OutputCache.aspx。

(2) 编辑该Web窗体,在页面里添加如下两行代码:

  1. <%=DateTime.Now.ToString() %>   
  2. <script>setTimeout("locationlocation.href=location.href",1000)</script

第一行在页面中打印当前时间,第二行使页面每隔1秒钟刷新一次。

(3) 在页面头部添加缓存代码如下:

  1. <%@ OutputCache Duration="5" VaryByControl="none" %

4. 运行结果

保存所有文件,运行项目。

访问OutputCache.aspx页面,结果如图3-5所示。

技术分享 
图3-5 OutputCache.aspx页面

该页面将每秒钟更新一次,但是页面内容会缓存5次,在第6次访问的时候更新。

5. 实例分析

源码解析:

该实例非常简单,在页面打印当前时间,并让页面每秒钟刷新一次。然后设置页面缓存5秒钟。

其实细心的读者可能会发现页面时间每次更新都会跨越6秒,而不是我们想象中的5秒钟换一个值。这是因为系统计算时间是在第一次访问开始,到第5次刷新时刚好5秒,所以这次显示的还是第一次访问的时间。处理完该次请求,缓存的数据作废,在第6次刷新(即第7次访问)的时候页面才重新生成并缓存页面。

 

以上是关于缓存整个页面的主要内容,如果未能解决你的问题,请参考以下文章

深入理解与使用keep-alive(配合router-view缓存整个路由页面)

Smarty 模板引擎下缓存设置

Xamarin.Forms - 页面缓存

Rails的不同缓存策略

如何使用页面缓存

关于JS缓存 处理