Кэширование пончиковых отверстий - исключить MiniProfiler.RenderIncludes
У меня есть действие ASP.NET MVC, которое украшено OutputCache
атрибут, но проблема в том, что вывод MiniProfiler также кэшируется. Я хотел бы исключить вывод MiniProfiler из кэширования (дырка от бублика), но я не уверен, как можно исключить вызов, подобный MiniProfiler.RenderInclude ().
Кто-нибудь, кто случайно знает, как я могу это сделать?
1 ответ
Это важный момент при использовании MiniProfiler в производстве. Как будто первое посещение страницы осуществляется пользователем, у которого включен MiniProfiler, все последующие запросы будут включать результаты MiniProfiler в DOM (так как они теперь кэшируются). Мало того, что результаты будут неправильными (поскольку они учитывают только первую загрузку), но все посетители смогут увидеть результаты вашего 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
аннотаций.