【问题标题】:Donut hole caching - exclude MiniProfiler.RenderIncludes甜甜圈孔缓存 - 排除 MiniProfiler.RenderIncludes
【发布时间】:2012-12-15 14:23:40
【问题描述】:

我有一个用OutputCache 属性修饰的 ASP.NET MVC 操作,但问题是 MiniProfiler 输出也被缓存了。我想从缓存中排除 MiniProfiler 输出(甜甜圈洞),但我不确定如何排除 MiniProfiler.RenderIncludes() 之类的调用。

有谁碰巧知道我该怎么做?

【问题讨论】:

  • 这有关系吗?如果页面来自输出缓存,则未调用操作和控制器,因此探查器不会显示任何内容,不是吗?
  • 这对服务器端来说是一个非常好的点,但 MiniProfiler 还会输出有关 DOM 中的加载时间等有趣的信息。

标签: asp.net-mvc mvc-mini-profiler donut-caching


【解决方案1】:

如果在生产中使用 MiniProfiler,这一点很重要。就好像用户第一次访问页面时启用了 MiniProfiler,所有后续请求都将在 DOM 中包含 MiniProfiler 结果(因为它们现在已被缓存)。不仅结果不正确(因为他们只考虑首次加载),而且所有访问者都可以看到您的 MiniProfiler 结果。

首先,为了启用甜甜圈洞缓存,我正在使用:

http://mvcdonutcaching.codeplex.com/

这允许您添加在使用 OutputCache 时不会被缓存的操作。

鉴于上述情况,您可以从布局页面中删除 @using StackExchange.Profiling;。然后您可以替换:

@MiniProfiler.RenderIncludes()

与:

@Html.Action("MiniProfiler", "DoNotCache", excludeFromParentCache: true)

我创建了一个 DoNotCache 控制器,所以我所有的不可缓存元素都放在一起,但这不是必需的,您可以将此操作放置在任何控制器中。

 public ActionResult MiniProfiler()
 {
      return View();
 }

然后视图本身看起来像:

@using StackExchange.Profiling;
@{
    Layout = null;
}
@MiniProfiler.RenderIncludes()

这将确保 MiniProfiler 结果在适当的时候显示出来,并且即使在您使用 DonutOutputCache 注释的地方也不会在生产环境中缓存。

【讨论】:

  • 谢谢 - 我会再调查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多