2012-12-15 4 views
6

OutputCache 특성으로 장식 된 ASP.NET MVC 동작이 있지만 문제는 MiniProfiler 출력도 캐시된다는 것입니다. MiniProfiler 출력을 캐싱 (도넛 구멍)에서 제외하고 싶지만 MiniProfiler.RenderIncludes()와 같은 호출을 어떻게 제외 할 수 있는지 잘 모르겠습니다.도넛 구멍 캐싱 - 제외 MiniProfiler.RenderIncludes

어떻게 이런 일을 할 수 있는지 알고있는 사람은 누구입니까?

+1

중요합니까? 페이지가 출력 캐시에서 나오면 액션과 컨트롤러는 호출되지 않으므로 프로파일 러는 아무 것도 표시하지 않습니다. – Aliostad

+0

그건 서버 쪽에서 정말 좋은 지적이지만, MiniProfiler는 흥미로운 DOM 등의 로딩 시간에 대한 정보도 출력합니다. – larsw

답변

6

프로덕션 환경에서 MiniProfiler를 사용하는 경우 중요한 점입니다. 페이지에 대한 첫 번째 방문이 MiniProfiler가 활성화 된 사용자에 의한 것처럼, 이후의 모든 요청에는 MiniProfiler 결과가 DOM에 포함됩니다 (캐시 된 것처럼). 결과는 정확하지 않을뿐만 아니라 (첫 번째로드 만 고려함) 모든 방문자가 MiniProfiler 결과를 볼 수 있습니다.

http://mvcdonutcaching.codeplex.com/

이 당신이 OutputCache를를 사용하는 경우 캐시되지 않습니다 작업을 추가 할 수 있습니다 :

첫째, 도넛 구멍 캐싱을 사용하기 위해, 나는의 사용을 만들고있어.

위와 같이 주어진 경우 레이아웃 페이지에서 @using StackExchange.Profiling;을 삭제할 수 있습니다. 그런 다음 대체 할 수

@MiniProfiler.RenderIncludes() 

으로 : 나는 DoNotCache 컨트롤러, 그래서 내 모든 캐시 할 수없는 요소가 함께하지만이 필요하지 않으며 당신이이 작업을 배치 할 수 있습니다를 만든

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

모든 컨트롤러.

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

이 적절하고, 심지어 당신이 DonutOutputCache 주석을 사용하는 곳에서 생산에 캐시하지 않을 경우 MiniProfiler 결과가 표시되어 있는지 확인합니다 :

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

그리고 다음 뷰 자체는 것처럼 보인다.

+0

감사합니다. 다시 살펴 보겠습니다. – larsw