片段缓存,用户控件输出缓存——是ASP.NET提供输出缓存页面部分内容的简单方法。
使用页面部分缓存,首先要将网页中放入缓冲区的部分分离出来,使用用户控件构建页面的缓冲区域,并使用@OutputCache指令将它们标记出来,确定这些部分以供缓存使用。
某个部分整个应用程序共有的,这些部分最适合使用片段缓存和用户控件进行缓存。
菜单和其他布局元素,尤其是那些从数据源动态生成的元素。
使用同一组控件的几百个页面还可以共享那些控件的缓存条目,而不是为每个页面保留单独的缓存版本。
片段缓存,用户控件输出缓存使用@OutputCache指令和页面输出缓存控件基本差不多,但Shared和VaryByControl是片段缓存、用户控件输出缓存页面部分缓存所特有。
除了 Location 属性和VaryByHeader 属性外,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件都支持。
在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared="true" 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。
<%@ OutputCache Duration="60" VaryByParam="*" % >
将60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="state;city" % >
将缓存用户控件60秒,并使用"state"和"city"查询字符串或窗体发布参数改变缓存。
VaryByParam在ASP.NET的服务器上缓存控件的多个实例。
eg:一个用户控件的宿主页的下列URL缓存用户控件内容的单独实例:
http://localhost/webfrom.aspx?state=shangxi&city=xian
http://localhost/webfrom.aspx?state=shangxi&city=xianyang
用户控件能根据提供的参数动态生成不同的内容,除了支持VaryByParam属性外,片段缓存,用户控件输出缓存还支持VaryByControl 的属性。
VaryByParam属性基于使用POST或GET发送的名称/值对改变缓存结果,而VaryByControl 的属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了 VaryByControl,不使用VaryByParam属性,也要将设置VaryByParam="none"。
eg:
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="CategoryDropDownList" % >
将缓存用户控件60 秒,并且将针对 CategoryDropDownList 控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" Shared="true % >
将缓存用户控件 60 秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的 ID 引用该控件即可)。p