页面和控件缓存
还是先来过一遍@OutpuCache所有的属性,共用11个属性,这个指令可以用于页面(.aspx)和用户控件(.ascx)
属性
Duration
页或用户控件进行缓存的时间,单位秒,可以在页面或控件上设置该属性来建立一个缓存的过期策略,该属性是必须的。
VaryByParam
分号分割的字符串列表,是否根据某个参数变化,和VaryByControl二者必须有一。如果不变化,可将值设置为none,否则设置为*,或者变化的参数名称(Get或Post的参数)。
VaryByControl
分号分割的字符串列表,只限于用户控件,串列表的值是服务器控件标识。
Shared 该属性仅限于.ascx文件,默认为false,用户控件是否可以由多个页面共享。
CacheProfile 你可以在web.config中配置一个缓存设置,这样以后就可以共用这个缓存设置,方便统一修改,不支持用户控件
NoStore 这个不是太清楚什么用,MSDN上说是决定是否对敏感信息辅助存储.
VaryByContentEncodings 同样也是逗号分隔的字符串列表,根据Accept-Encodeing Http头来决定是否缓存不同的版本。
VaryByCustom 通过这个属性,你可以自定义怎么来缓存页面
SqlDependency 为当前缓存指定一个依赖项,当发生变动时从缓存区中删除掉当前页面或控件的缓存。
<%@ OutputCache Duration="100" VaryByParam="none" %>
上面指令没有指定Location默认是客户端和服务器端都缓存,这个时候如果改变页面的QueryString会被忽略,直接从缓存中返回结果,所以在需要根据参数返回不同内容的页面千万不要这么设置,可以采用以下方式:
<%@ OutputCache Duration="100" VaryByParam="*"%>
<%@ OutputCache Duration=”60” VaryByParam=”None” %>
Duration 属性设置页面将被缓存60妙。任何的用户请求都会被缓存,在缓冲的60秒内相同的请求都会直接使用缓存的页面。当缓存过期后ASP.NET会再次执行页面代码并且为下一个60秒创建一个新的HTML缓存。
上面关于Duration属性,说是必须的,其实也不然,当你不想用缓存是就不必写^_^,如下,禁用当前页面缓存:
<%@ OutputCache Location="None" %>
片段缓存
<%@ 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 引用该控件即可)。
缓存API