2012-12-15 11 views
6

Ich habe eine ASP.NET MVC-Aktion, die mit dem OutputCache Attribut verziert ist, aber das Problem ist, dass die MiniProfiler-Ausgabe auch zwischengespeichert wird. Ich möchte die MiniProfiler-Ausgabe vom Zwischenspeichern (Donut-Loch) ausschließen, aber ich bin mir nicht sicher, wie ich einen Anruf wie MiniProfiler.RenderIncludes() ausschließen kann.Donut Loch Caching - ausschließen MiniProfiler.RenderIncludes

Wer weiß, wie ich das machen kann?

+1

Spielt es eine Rolle? Wenn die Seite aus dem Ausgabe-Cache kommt, dann würde die Aktion und der Controller, der so nicht als Profiler bezeichnet wird, sowieso nichts anzeigen, nein? – Aliostad

+0

Das ist ein wirklich guter Punkt für die Serverseite, aber MiniProfiler gibt auch Informationen über die Ladezeit im DOM usw. aus, die interessant wären. – larsw

Antwort

6

Dies ist ein wichtiger Punkt bei der Verwendung von MiniProfiler in der Produktion. Als ob der erste Besuch einer Seite von einem Benutzer erfolgt, bei dem MiniProfiler aktiviert ist, enthalten alle nachfolgenden Anfragen die MiniProfiler-Ergebnisse im DOM (wie sie jetzt zwischengespeichert sind). Die Ergebnisse sind nicht nur falsch (da sie nur die erste Ladung berücksichtigen), sondern alle Besucher können Ihre MiniProfiler-Ergebnisse sehen.

Zum einem Donut-Loch-Caching zu aktivieren, ich mache Gebrauch von:

http://mvcdonutcaching.codeplex.com/

Auf diese Weise können Sie Aktionen hinzufügen, die nicht im Cache gespeichert werden, wenn der Output verwenden.

Angesichts der oben genannten können Sie @using StackExchange.Profiling; von Ihrem Layout entfernen. Sie können dann ersetzen:

@MiniProfiler.RenderIncludes() 

mit:

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

Ich habe eine DoNotCache Controller erstellt, so dass alle meine nicht cachespeicherbare Elemente zusammen sind, aber dies ist nicht erforderlich, und Sie können diese Handlung in jeder Controller.

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

Und dann der Blick selbst sieht aus wie:

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

Dadurch wird sichergestellt, werden die Miniprofiler Ergebnisse angezeigt, wenn angemessen, und nicht an Stellen in der Produktion noch im Cache gespeichert, wo Sie die DonutOutputCache Anmerkung verwenden.

+0

Danke - ich werde das nochmal prüfen. – larsw

Verwandte Themen