zoukankan      html  css  js  c++  java
  • ASP.NET缓存:缓存页的多个版本

         Asp.net允许在输出缓存中缓存一个页的多个版本。

         造成缓存多个版本的原因:

              (1)初始请求 (HTTP GET) 中的查询字符串。

              (2)回发时传递的控制值(HTTP POST 值)。

              (3)随请求传递的 HTTP 标头。

              (4)发出请求的浏览器的主版本号。

              (5)该页中的自定义字符串。

          缓存页多个版本方式:

              (1)通过HttpCachePolicy类的属性和方法以编程方式。

              (2)通过@ OutputCache指令的特性以声明方式。

                      VaryByParam 特性可用来声明缓存输出因查询字符串而异。

                      VaryByControl 特性可用来声明缓存输出因控制值而异。

                      VaryByHeader 特性可用来声明缓存输出因请求的 HTTP 标头而异。

                      VaryByCustom 特性可用来使缓存输出因浏览器类型或您定义的自定义字符串而异。

    •  使用请求浏览器缓存页的各个版本

           如果您的 Web 应用程序包含一个基于请求浏览器的类型创建不同输出的页,则可以按请求该页的浏览器的主版本来缓存页输出的版本。  

            (1)基于浏览器类型以声明方式缓存页的多个版本

                    1、@ OutputCache指令中必须包括Duration特性,Duration特性值必须为大于零的整数。该指令还必须包括VaryByParamVaryByControl特性。

                    2、如果仅希望按浏览器缓存,则把VaryByCustom特性设置为“browser”,并把VaryByParam特性设置为“None”。

           <%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>

            (2)基于浏览器类型以编程方式缓存页的多个版本

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));
        Response.Cache.SetCacheability(HttpCacheability.Public);
        Response.Cache.SetValidUntilExpires(true);
        Response.Cache.SetVaryByCustom("browser");
    }
    •  使用参数对页的各个版本进行缓存

          (1)使用参数以声明方式缓存页输出的多个版本 

                  1、如果要根据多个参数改变输出缓存,设置VaryByParam特性值为带“;”号的参数列表。

                  2、如果根据所有参数改变输出缓存,设置VaryByParam特性值为“*”。

    <%@ OutputCache Duration="60" VaryByParam="City" %>
    <%@ OutputCache Duration="60" VaryByParam="City;ZipCode" %>

           (2)使用参数以编程方式缓存页输出的多个版本

    Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.Cache.SetValidUntilExpires(true);
    Response.Cache.VaryByParams["City"] = true;
    Response.Cache.VaryByParams["Zip"] = true;
  • 相关阅读:
    jQuery validate 的valid()方法一直返回true
    Webstrom 使用过程中遇到的问题以及解决方案
    CSS选择符 新的认识
    前端常用正则匹配
    魔术师
    node 安装express
    为什么报错说req未定义,createServer只接受匿名函数吗?
    nodejs报错 events.js:72 throw er; // Unhandled 'error' event
    我对 javascript 闭包的理解
    ORM框架,sqlsugar学习一
  • 原文地址:https://www.cnblogs.com/wanghonghu/p/2535229.html
Copyright © 2011-2022 走看看