部分缓存
部分缓存允许只缓存部分HTML,它的效率很高,因为一个页中经常变化的部分可与那些不经常变化部分的部分合并到一起,同时仍能从缓存中检索静态的部分。一个实例是将“部分缓存”应用于需要调用XML Web服务的Web用户控件。这样可获得很高的效率,因为它避免了你的网站与Web服务过度紧密地耦合,同时还能显著提升性能。
要使用部分缓存,同样可在HTML页的顶部放置一条OutputCache预处理指令。但这一次,我们准备把它放到Web用户控件的ASCX页中。注意使用部分缓存时,Location和VaryByHeader属性将不再支持,但新增了对VaryByControl属性的支持。
使用VaryByControl属性,可用一个由分号分隔的列表来指定用户控件的一个或多个属性。可为属性值的每一种组合来创建缓存的版本。例如,假定你的用户控件揭示出一个自定义的State属性,它控制着要显示用户控件的哪些元素。使用以下预处理指令,可针对State的每个值来缓存控件所具体呈现的一个版本:
<%@ OutputCache Duration="300" VaryByControl="State" %>
但在缓存Web用户控件时,记住ASP.NET运行库会直接用缓存的HTML来替换实际控件,忽略平常会发生的任何控件处理。这暗示着在网页中执行的代码不能程序化地操纵一个缓存的用户控件或者它的任何属性。换言之,Web用户控件必须能完全自主,并能通过它的Load和Init事件来初始化自己,以便有效地缓存。
也可声明性地完成部分缓存,方法是使用一个属性而不是使用OutputCache预处理指令。在代码隐藏文件中,PartialCaching属性可放在从UserControl派生的一个类中,使ASP.NET运行库能够读取它,并相应地缓存呈现好的HTML。例如,以下来自代码隐藏类的声明能根据查询字符串中的id值,将Web用户控件缓存5分钟。
<PartialCaching(300, "id", Nothing, Nothing)> _
Public MustInherit Class MyHeaderControl
Inherits System.Web.UI.UserControl
