ASP.NET的缓存引擎支持三种类型的缓存:
整页输出缓存是最简单的缓存类型,它只要求为准备缓存的页添加一个预处理指令OutputCache。使用这种缓存,就不必重新处理一个页的Init,Load,PreRender,Render以及Unload事件。假如那些事件要访问像数据库那样的一个后端系统,那么节省的时间将是非常可观的。ASP.NET可缓存一个页的几个变体,并将每个页都与后续请求相关联。所有这些都由OutputCache预处理指令来控制,该命令要放在一个ASPX页的顶部,并采用以下格式:
<%@ OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | None" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parameter name" %>
OutputCache预处理指令最多可利用5个相关的属性来控制缓存行为。表A总结了这些属性及其含义。
表A
属性 | 说明 |
Duration | 该属性指定了网页要缓存的时间(以秒为单位)。通过为一个页设置该属性,可为来自对象HTTP响应建立一个过期策略。这是一个必需属性。如果不包括它,会发生解析器错误。注意它指定的是绝对过期时间,而非周期性过期。 |
Location | 用这个属性指示Web服务器和下游设备(比如代理服务器和浏览器)来缓存页面内容。默认为Any,该属性并非必需的。 |
VaryByParam | 该属性使用由分号分隔的字符串列表来改变输出缓存。默认情况下,这些字符串对应于随GET方法属性发送的查询字符串值,或对应于使用POST方法发送的一个参数。如果将该属性设为多个参数,输出缓存将针对指定的每个参数,包含所请求的文档的一个不同版本。可能的值包括None、*以及任何有效的查询字符串或POST参数名。如果没有设置其他属性,该属性就是必需的。 |
VaryByCustom | 对自定义输出缓存需求进行表示的任何文本都要包含在这个属性中。如果为属性指派浏览器的一个值,缓存会根据浏览器名称及主版本信息而发生变化。如果输入一个自定义字符串,就必须在应用程序的Global.asax文件中覆盖GetVaryByCustomString方法。 |
VaryByHeader | 该属性使用由分号分隔的HTTP标头列表来改变输出缓存。如果属性设为多个标头,输出缓存将针对指定的每个标头,包含所请求文档的一个不同的版本。 |
OutputCache预处理指令可在内存中方便地创建静态页的单一版本,例如:
<%@ OutputCache Duration=“300" VaryByParam="None" %>
还可根据id查询字符串参数来缓存多个版本,例如:
<%@ OutputCache Duration=“300" VaryByParam="id" %>
在上述两个例子中,网页会在5分钟(300秒)后从缓存中清除,该数字是由Duration属性指定的。