【发布时间】:2011-02-07 03:02:11
【问题描述】:
我是一名网页设计师,通常设计不需要更新的企业网站。所以我想将输出缓存一天。我该怎么做?
也接受任何关于在慢速服务器上提高 asp.net 性能的建议。
【问题讨论】:
标签: asp.net performance caching
我是一名网页设计师,通常设计不需要更新的企业网站。所以我想将输出缓存一天。我该怎么做?
也接受任何关于在慢速服务器上提高 asp.net 性能的建议。
【问题讨论】:
标签: asp.net performance caching
请注意,自 1.0 以来 ASP.NET 缓存有一个 bug,它可以有效地禁用客户端缓存。
这就是后来添加HttpCachePolicy.SetOmitVaryStar() 方法作为解决方法的原因。
开发者应该使用它,但不幸的是,他们似乎很少有人知道上述方法。
作为响应,ASP.NET 4.0 中的行为发生了变化,详见ASP.NET 4 Breaking Changes list:
在 ASP.NET 1.0 中,一个错误导致将 Location="ServerAndClient" 指定为输出缓存设置的缓存页面在响应中发出 Vary:* HTTP 标头。这具有告诉客户端浏览器永远不要在本地缓存页面的效果。
在 ASP.NET 1.1 中,添加了 System.Web.HttpCachePolicy.SetOmitVaryStar 方法,您可以调用该方法来抑制 Vary:* 标头。选择此方法是因为更改发出的 HTTP 标头在当时被认为是潜在的破坏性更改。但是,开发人员对 ASP.NET 中的行为感到困惑,并且错误报告表明开发人员不知道现有的 SetOmitVaryStar 行为。
在 ASP.NET 4 中,决定修复根本问题。 Vary:* HTTP 标头不再从指定以下指令的响应中发出:
因此,不再需要 SetOmitVaryStar 来抑制 Vary:* 标头。
在页面上的 @OutputCache 指令中指定 Location="ServerAndClient" 的应用程序中,您现在将看到 Location 属性值的名称所暗示的行为——也就是说,页面可以在浏览器中缓存而不需要你调用 SetOmitVaryStar 方法。
如果您的应用程序中的页面必须发出 Vary:*,请调用 AppendHeader 方法,如下例所示:
HttpResponse.AppendHeader("Vary","*");
或者,您可以将输出缓存位置属性的值更改为“服务器”。
【讨论】:
我建议您遵循此规则以提高总体性能
http://developer.yahoo.com/performance/rules.html
如果您为 firebug 安装 YSlow,它将为您验证所有这些规则。
特别是关于缓存,我建议您阅读本教程。缓存是一个非常广泛的话题,用 10 行来解释所有内容并不容易:-)
http://www.mnot.net/cache_docs/#CONTROL
专门讨论 ASP NET 页面的输出缓存指令,使用起来非常简单。给你参考
http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx
但请注意,将缓存用于页面以及其他资源(如 css、JS 和图像)非常重要。
【讨论】:
你使用 outputcache 指令
http://www.codeproject.com/KB/web-cache/cachingaspnet.aspx
编写高性能 Web 应用程序的 10 个技巧
【讨论】: