系统缓存全解析2:页面输出缓存

    页面输出缓存是最为简单的缓存机制,该机制将整个ASP.NET页面内容保存在服务器内存中。当用户请求该页面时,系统从内存中输出相关数据,直到缓存数据过期。在这个过程中,缓存内容直接发送给用户,而不必再次经过页面处理生命周期。通常情况下,页面输出缓存对于那些包含不需要经常修改内容的,但需要大量处理才能编译完成的页面特别有用。需要读者注意的是,页面输出缓存是将页面全部内容都保存在内存中,并用于完成客户端请求。

ASP.NET中页面缓存的使用方法非常的简单,只需要在aspx页的顶部加这样一句声明即可:

  <%@ OutputCache Duration="60" VaryByParam="none" %>

 

Duration  

缓存的时间(秒)。这是必选属性。如果未包含该属性,将出现分析器错误。

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm1" %>

<%@ OutputCache Duration="60" VaryByParam="none" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>页面缓存示例</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    </div>

    </form>

</body>

</ html >

       

后台代码:

       protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                Label1.Text = DateTime.Now.ToString();

            }

 

        }

       

    如果不加<%@ OutputCache Duration="60" VaryByParam="none" %>,每次刷新页面上的时间每次都是在变。而加了缓存声明以后,每次刷新页面的时间并不变化,60秒后才变化一次,说明数据被缓存了60秒。

 

VaryByParam

是指页面根据使用 POST GET 发送的名称/值对(参数)来更新缓存的内容,多个参数用分号隔开。如果不希望根据任何参数来改变缓存内容,请将值设置为 none。如果希望通过所有的参数值改变都更新缓存,请将属性设置为星号 (*)

例如: http://localhost:1165/16-4-3/WebForm1.aspx?p=1
则可以在WebForm1.aspx页面头部声明缓存:
<%@ OutputCache Duration="60" VaryByParam="p" %>

以上代码设置页面缓存时间是60秒,并根据p参数的值来更新缓存,即p的值发生变化才更新缓存。

如果一直是WebForm1.aspx?p=1访问该页,则页面会缓存当前数据,当p=2时又会执行后台代码更新缓存内容。

 

如果有多个参数时,如:http://localhost:1165/16-4-3/WebForm1.aspx?p=1&n=1

可以这样声明:<%@ OutputCache Duration="60" VaryByParam="p;n" %>  

 

除此之外,@OutputCache 还有一些其他的属性。@OutputCache指令中的属性参数描述如下:

 <%@ OutputCache Duration="#ofseconds"

   Location="Any | Client | Downstream | Server | None |

     ServerAndClient "

   Shared="True | False"

   VaryByControl="controlname"

   VaryByCustom="browser | customstring"

   VaryByHeader="headers"

   VaryByParam="parametername"

   CacheProfile="cache profile name | ''"

   NoStore="true | false"

   SqlDependency="database/table name pair | CommandNotification"

%>

 

 

CacheProfile

用于调用Web.config配置文件中设置的缓存时间。这是可选属性,默认值为空字符 ("")

例如:

Web.config中加入配置:

<system.web>

    <caching>

        <outputCacheSettings>

            <outputCacheProfiles>

                <add name="CacheTest" duration="50" />

            </outputCacheProfiles>

        </outputCacheSettings>

 

 

</caching>

 

  

 

</system.web>

  

 

       

页面中声明:

<% @ OutputCache CacheProfile="CacheTest"  VaryByParam="none" %>

 

 

注意:

包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此属性。在页中指定此属性时,属性值必须与 outputCacheSettings 节下面的 outputCacheProfiles 元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常

 

如果每个页面的缓存时间相同,则不需要每个页面设置,而是通过统一一个地方控制,这样就可以更好的统一控制所有页面的缓存时间。如果想改变缓存时间,只需要改一下web.config的配置信息即可,而不用每个页面去修改。

 

VaryByControl

通过用户控件文件中包含的服务器控件来改变缓存(值是控件ID,多控件用分号隔开)

ASP.NET 页和用户控件上使用 @ OutputCache 指令时,需要该属性或 VaryByParam 属性。

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="CacheWebApp._16_4_3.WebForm2" %>

<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>根据控件页面缓存</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

         <%=DateTime.Now %>       

        <br>

    <asp:DropDownList ID="DropDownList1" runat="server">

        <asp:ListItem>beijing</asp:ListItem>

        <asp:ListItem>shanghai</asp:ListItem>

        <asp:ListItem>guangzhou</asp:ListItem>

        </asp:DropDownList>

        <asp:Button ID="Button1" runat="server" Text="提交" />

    </div>

    </form>

</body>

</ html >

 

以上代码设置缓存有效期是60秒,并且页面不随任何GETPOST参数改变(即使不使用VaryByParam属性,但是仍然需要在@ OutputControl指令中显式声明该属性)。如果用户控件中包含ID属性为“DropDownList1”的服务器控件(例如下拉框控件),那么缓存将根据该控件的变化来更新页面数据。

 

 

页面输出缓存API

Response类的Cache属性用于获取页面缓存策略。该方式的核心是调用System.Web.HttpCachePolicy。该类主要包含用于设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。与.NET Framework 1.x中的HttpCachePolicy类相比,.NET Framework 2.0中的HttpCachePolicy类得到了扩充和发展。主要是增加了一些重要方法,例如,SetOmitVarStar方法等。由于HttpCachePolicy类方法众多,下面简要说明几个常用方法。

SetExpires方法

用于设置缓存过期的绝对时间。它的参数是一个DataTime类的实例,表示过期的绝对时间。

 

        protected void Page_Load(object sender, EventArgs e)

        {

            // 通过API设置缓存

            //相当于@OutputCache指令中的Duration属性

            Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));

            Response.Cache.SetExpires(DateTime.Parse("6:00:00PM"));

        }

 

 

 

如上代码,第一行代码表示输出缓存时间是60秒,并且页面不随任何GETPOST参数改变,等同于“<%@ OutputCache Duration="60" VaryByParam="none" %>”。第二行代码设置缓存过期的绝对时间是当日下午6时整。

 

SetLastModified方法

用于设置页面的Last-Modified HTTP标头。Last-Modified HTTP标头表示页面上次修改时间,缓存将依靠它来进行计时。如果违反了缓存限制层次结构,此方法将失败。该方法的参数是一个DataTime类的实例。

 

SetSlidingExpiration方法

该方法将缓存过期从绝对时间设置为可调时间。其参数是一个布尔值。当参数为true时,Cache-Control HTTP标头将随每个响应而更新。此过期模式与相对于当前时间将过期标头添加到所有输出集的IIS配置选项相同。当参数为False时,将保留该设置,且任何启用可调整过期的尝试都将静态失败。此方法不直接映射到HTTP标头。它由后续模块或辅助请求来设置源服务器缓存策略。

 

SetOmitVaryStar方法

ASP.NET 2.0新增的方法。用于指定在按参数进行区分时,响应是否应该包含vary:*标头。方法参数是一个布尔值,若要指示HttpCachePolicy不对其VaryByHeaders属性使用*值,则为true;否则为false

 

SetCacheability方法

    用于设置页面的Cache-Control HTTP标头。该标头用于控制在网络上缓存文档的方式。该方法有两种重载方式,所不同的是参数。一种重载方法的参数是HttpCacheability枚举值,包括NoCachePrivatePublicServerServerAndNoCacheServerAndPrivate(有关这些枚举值的定义,可参考MSDN)。另一种方法的参数有两个,一个参数是HttpCacheability枚举值,另一个参数是字符串,表示添加到标头的缓存控制扩展。需要注意的是,仅当与PrivateNoCache指令一起使用时,字段扩展名才有效。如果组合不兼容的指令和扩展,则此方法将引发无效参数异常。

  

 

 

 

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 PHP 中,可以使用输出缓冲区来获取动态生成的页面内容。具体步骤如下: 1. 开启输出缓冲区:使用 `ob_start()` 函数开启输出缓冲区,使得所有输出内容都被缓存。 2. 加载动态内容:在开启输出缓冲区后,可以通过 include、require 等函数加载动态内容,动态内容会被缓存输出缓冲区中。 3. 获取页面内容:使用 `ob_get_clean()` 函数获取输出缓冲区中的内容,并清空缓冲区。 示例代码如下: ```php <?php // 开启输出缓冲区 ob_start(); // 加载动态内容 include 'dynamic_content.php'; // 获取页面内容 $page_content = ob_get_clean(); // 输出页面内容 echo $page_content; ?> ``` 其中,`dynamic_content.php` 是动态内容所在的文件路径,可以根据实际情况进行修改。 ### 回答2: 在PHP中,要加载所有动态内容后获取页面内容,可以使用以下步骤: 1. 首先,需要使用PHP代码加载所有动态内容。这可以通过不同的方式实现,例如从数据库中获取数据,调用API接口或者读取文件等等。根据具体需求选择加载数据的方法,并将加载得到的内容存储在变量中。 2. 接下来,通过PHP的输出缓冲功能,可以将页面内容捕捉到一个变量中。使用 ob_start() 函数开启输出缓冲区,然后在缓冲区之后的代码中输出页面内容。 3. 在页面内容输出之后,使用 ob_get_contents() 函数将输出页面内容获取到一个变量中。这样就可以获取到页面内容了。 4. 最后,使用 ob_end_clean() 函数清除输出缓冲区,确保页面内容不会被输出到浏览器。然后可以对获取到的页面内容进行进一步处理,例如保存到文件、发送到其他地方或者进行其他操作。 综上所述,通过以上步骤,可以在加载所有动态内容后获取到页面内容。使用PHP的输出缓冲相关函数,可以灵活地控制输出的内容,并在获取到所需内容后进行后续处理。 ### 回答3: 在PHP中,我们可以通过一系列步骤来加载所有动态内容后获取页面内容。 首先,我们需要使用PHP的内置函数来加载动态内容。可以使用include或require语句来加载其他文件或脚本,将其内容嵌入当前的PHP文件中。这样可以确保在页面被执行或输出之前,动态内容已经被加载。 其次,根据具体的需求,我们可以使用不同的方法来获取页面内容。如果我们希望获取整个页面的内容,可以使用file_get_contents函数。这个函数可以读取指定URL的内容并以字符串的形式返回。我们只需要将要获取内容的URL作为参数传递给该函数即可。 另外,如果页面内容较大或需要进行一些处理,可以考虑使用cURL库。cURL库是一个用于进行URL传输的开源库,可以实现不同的网络协议,并支持各种操作和功能。通过cURL,我们可以更加灵活地获取和处理页面内容,例如添加请求头、设置超时时间等。 最后,获取到页面内容后,我们可以根据需求进行进一步的处理。例如,可以将内容保存到文件中、解析HTML元素、提取关键信息等。 需要注意的是,加载和获取页面内容的过程中可能会出现一些问题,例如访问权限限制、网络连接失败等。我们需要进行适当的错误处理和异常捕获,以确保代码的稳定性和可靠性。同时,还要注意合理和安地使用加载和获取页面内容的功能,以避免潜在的安风险和性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李天平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值