演练:使用输出缓存增强网站性能
更新:2007 年 11 月
性能是任何 Web 应用程序的关键方面。必须减少 Web 服务器的处理量,以便使单个请求结果响应速度更快、服务器有能力处理更多并发请求并减少中间和后端数据系统的负荷。
使用输出缓存以减少服务器的工作负荷,能够实现更佳的 ASP.NET 性能。输出缓存是一种优化方案,可以缩短 Web 服务器响应的时间。
通常,浏览器请求 ASP.NET 页时,ASP.NET 将创建该页的实例,运行该页中的任何代码,运行数据库查询(如果有),动态汇编此页,然后将产生的输出发送到浏览器。输出缓存使 ASP.NET 能够发送该页的预处理副本,而不用为每个请求完成此过程。这个区别降低了 Web 服务器的处理量,从而提高了性能并获得更大的可伸缩性。
本演练涉及以下任务:
缓存页,使用页指令缓存整个页输出,而不管浏览器类型、各个参数或数据。
使用应用程序级别缓存配置文件,此功能使您能够定义整个应用程序的输出缓存设置。各个页可以与 Web.config 文件中包含的配置文件关联。这使您能够集中控制缓存,而不用编辑每个页。
根据与页一起发送的各个参数进行缓存。
先决条件
若要完成本演练,您需要:
Visual Web Developer (Visual Studio)。
Microsoft .NET Framework 2.0 版。
创建网站
如果已经在 Visual Web Developer 中创建一个网站(请参见 演练:在 Visual Web Developer 中创建基本网页),可以使用该网站并转到本演练的下一个主题。否则,按照下面的步骤创建一个新的网站和网页。
创建文件系统网站
打开 Visual Web Developer。
在“文件”菜单上单击“新建网站”。(在 Visual Web Developer 速成版中,在“文件”菜单上单击“新建”,然后单击“网站”。)
出现“新建网站”对话框。
在“Visual Studio 已安装的模板”下选择“ASP.NET 网站”。
在“位置”框中键入要保存网站网页的文件夹的名称。
例如,键入文件夹名 C:\WebSites。
在“语言”列表中,选择您想使用的编程语言。
单击“确定”。
Visual Web Developer 创建该文件夹和一个名为 Default.aspx 的新页。
配置页级别缓存
此过程介绍基本页缓存。在此过程中,会将一个 Label 控件添加到页面以显示此页的创建时间,然后将此页配置为进行缓存。通过显示页的创建时间,可以看到是否从缓存完成了页请求。
配置页级别缓存
打开或切换到 Default.aspx 页。(或者,可以使用网站中的任何其他页。)
切换到“设计”视图。
从工具箱的“标准”组中,将 Label 控件拖动到页上,保留默认名称 Label1。
双击页的一个空白区域。
设计器切换到代码编辑器,并创建一个 Page_Load 方法。
将以下突出显示的代码添加到方法中:
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Label1.Text = System.DateTime.Now.ToString() End Sub
protected void Page_Load(Object sender, System.EventArgs e) { Label1.Text = System.DateTime.Now.ToString(); }
按 Ctrl+F5 运行该页。
此页面在浏览器中出现时,将看到当前日期和时间。按浏览器的刷新按钮,可注意到时间戳每次都会改变。
关闭浏览器。
将下面的 @ OutputCache 指令添加至页的顶部:
<%@ OutputCache Duration="15" VaryByParam="none" %>
此指令配置页面以进行缓存。Duration 属性指定页将在缓存中保留 15 秒。
按 Ctrl+F5 再次运行该页。
多次刷新页面。
请注意,无论您刷新了多少次浏览器,时间显示仅每 15 秒更新一次。这是因为请求从缓存完成,直至持续时间过时为止,此时页代码再次执行。
设置应用程序级别缓存
在前面的过程中,配置了单个页面的缓存。在某些情况下,可能希望为网站中的所有页配置缓存。可能还希望建立不同的缓存规则(配置文件),并将缓存配置文件应用到各组单独页面。设置应用程序级别缓存使您能够从单个配置文件更改缓存行为,而无需编辑各个页面的 @ OutputCache 指令。在下面的过程中,将设置一个简单的缓存配置文件,并将其用于刚刚使用的页面。
配置应用程序级别缓存
如果已经有一个 Web.config 文件,请转到步骤 4。
在解决方案资源管理器中,右击网站的名称,然后单击“添加新项”。
在“添加项”对话框中,单击“Web 配置文件”,然后单击“添加”。
请确定使用的名称为 Web.config。
将以下 XML 添加为 system.web 元素的子项:
<!-- caching section group --> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="AppCache1" enabled="true" duration="60"/> </outputCacheProfiles> </outputCacheSettings> </caching>
保存文件,然后将其关闭。
打开或切换到刚才使用的页,然后切换到“源”视图。
将 @ OutputCache 指令更改为以下内容:
<%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
按 Ctrl+F5 运行该页。
多次刷新页面。
这次,日期将在缓存配置文件中指定的持续时间(为 60 秒)内保持不变。
使用参数进行缓存
@ OutputCache 指令要求您设置 VaryByParam 属性,到目前为止,此属性设置为“none”。VaryByParam 属性使您能够配置缓存,以便 ASP.NET 根据参数(如查询字符串、窗体发布值、请求标头等)存储不同版本的页面。
例如,可以在显示所选城市的天气情况的页面中使用缓存参数,天气数据仅每三小时刷新一次。在此情况下,您希望为每个城市缓存页面的单独版本。可以将缓存参数设置为根据查询字符串参数的不同而改变来执行此操作。
在下面的过程中,将更改添加到页的 Label 控件,以便用彩色背景显示时间。可以使用 TextBox 控件并输入颜色名称来更改颜色。
提交此页时,键入的颜色作为传递数据提交,且 Label 控件后的颜色改变。请求新颜色时(页包括新的传递数据时),将重新生成此页并更新时间戳。不过,对相同颜色的后续请求将导致返回已缓存的页(直至超过持续间隔时间为止)。
根据参数缓存
打开或切换到使用的页。
切换到“设计”视图。
从工具箱的“标准”组中,将 TextBox 控件拖动到页面上,并将其 ID 设置为“Color”。
将 Button 控件拖动到页面上,保留默认值 Button1。
将 Button 控件的 Text 属性设置为“Change Color”。
双击 Button 控件以创建 Click 事件处理程序。
在此方法中添加以下突出显示的代码:
Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click Label1.BackColor = _ System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text)) End Sub
protected void Button1_Click(Object sender, System.EventArgs e) { Label1.BackColor = System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text)); }
将 form 元素的 defaultbutton 属性设置为“Button1”。
这会导致按下 Enter 键时将引发按钮的 Click 事件处理程序。
用下面的版本替换 @ OutputCache 指令:
<%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
按 Ctrl+F5 运行该页。
在文本框中键入颜色名称,如“红”或“蓝”,然后单击“更改颜色”。
ASP.NET 缓存使用您指定的颜色的页面版本。
多次刷新页面。
如果没有键入新的颜色名称,则日期和时间将至少有一分钟不变(在 @ OutputCache 指令的 Duration 属性中指定)。
输入新颜色,如“绿”或“紫”,然后提交页。
这次将看到时间和新颜色一起更新。
后续步骤
本演练阐释了缓存 ASP.NET 页的基本概念。您可能还希望研究以下其他缓存技术:
除了使用页声明,还可以以编程方式指定缓存。例如,在 Page_Load 方法中,可以访问 HttpCachePolicy 类(通过 Page.Response.Cache),并相应设置值和行为。
缓存数据绑定页,使它们仅当所使用的数据更改时才重新生成。有关详细信息,请参见 演练:将 ASP.NET 输出缓存与 SQL Server 结合使用。
请参见
任务
演练:将 ASP.NET 输出缓存与 SQL Server 结合使用