• 页输出缓存


    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
    页输出缓存输出缓存是一种功能强大的技术,它通过缓存从动态页生成的内容来提高请求/响应的吞吐量。默认情况下启用输出缓存,但不缓存来自任何给定响应的输出,除非采取显式操作使该响应成为可缓存的。

    若要使响应满足输出缓存的条件,它必须具有有效的过期/有效性策略和公共的缓存可见性。这可通过使用低级别的 OutputCache API 或高级别的 @ OutputCache 指令来实现。 启用输出缓存后,当发出对页的第一个 GET 请求时创建一个输出缓存项。随后的 GETHEAD 请求由该输出缓存项服务,直到该缓存请求过期。

    输出缓存还支持缓存的 GETPOST 名称/值对的变体。

    输出缓存遵循页的过期和有效性策略。如果某页位于输出缓存中,并且有一个过期策略标记指示该页自缓存起 60 分钟后过期,则在 60 分钟后将该页从输出缓存中移除。如果此后接收到另一个请求,则执行页代码,并且可以再次缓存该页。这种过期策略称为绝对过期,即页在某个确定的时间之前有效。

    下面的示例说明用 @ OutputCache 指令输出缓存响应的简单方法。此示例仅显示生成响应的时间。若要查看输出缓存的运行情况,请调用该页并注意生成响应的时间。然后刷新该页并注意原来的时间没有更改,表明输出缓存正在为第二个响应服务。

    下面的指令在响应时激活输出缓存:

    <%@ OutputCache Duration="60" VaryByParam="none"%>此指令仅指示页应缓存 60 秒,而且页不随任何 GETPOST 参数改变。在该页仍被缓存时接收到的请求由缓存服务。60 秒后,从缓存中移除该页;将显式处理下一个请求并再次缓存页。

    当然,在上例中,输出缓存几乎没有省去任何工作。下面的示例显示相同的输出缓存技术,但查询一个数据库并将结果显示在网格中。

    在最后的示例中,对应用程序做了轻微的修改,使用户可以有选择地查询各个州的作者。此示例说明如何使用 @ OutputCache 指令的 VaryByParam 属性,缓存随查询字符串中的名称/值对值变化的请求。

    <%@ OutputCache Duration="60" VaryByParam="state" %>对于数据集中的每个州,都有一个将所需的州作为查询字符串的一部分进行传递的链接。应用程序然后构造合适的数据库查询,并显示仅属于选定州的作者。

    注意,当您第一次单击给定州的链接时,它在页的底部生成一个新的时间戳。此后,每当在一分钟内重新提交对该州的请求时,都会得到原来的时间戳,表示该请求已被缓存。

    应用程序若要更多地控制与缓存相关的 HTTP 标头,可使用 System.Web.HttpCachePolicy 类提供的功能。下面的示例显示等效于上例中使用的页指令的代码。

    Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); C# VB JScript

    若要使之成为变化的过期策略(即每次请求页时都重新设置过期时间),请按以下代码所示来设置 SlidingExpiration 属性。

    Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public)Response.Cache.SetSlidingExpiration(True) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); C# VB JScript

    注意:启用变化的过期后 (SetSlidingExpiration(true)),对原服务器的请求总是会生成一个响应。在下游缓存可满足客户端请求(缓存中的内容尚未过期)而无须从原服务器请求内容的情况下,使用变化的过期时间是很有用的。

    从 ASP 移植过来的应用程序可能已用 ASP 属性设置了缓存策略;例如:

    Response.CacheControl = "Public";Response.Expires = 60; Response.CacheControl = "Public"Response.Expires = 60 Response.CacheControl = "Public";Response.Expires = 60; C# VB JScript

    这些属性受 ASP.NET 的支持,并且具有同已显示的其他示例相同的作用。

    本节小结
    1. 输出缓存技术缓存由 ASP.NET 页生成的内容。
    2. 除非页具有有效的过期时间或有效性策略和公共的缓存可见性,否则不将其放入输出缓存。
  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/netcorner/p/2912352.html
Copyright © 2020-2023  润新知