2012-03-02 49 views
1

我想添加緩存到某些子動作,所以我可以單獨緩存部分單個頁面。MVC:OutputCache和極慢的RenderPartial

我需要同樣的控制器的方法是可訪問無論從AJAX並用RenderAction(或一些其它嵌入方法)。

我已更改我的代碼以使用RenderAction,並且我發現每個Html.RenderAction都會在頁面加載時間增加大約1秒,因爲第一次加載非常緩慢 - 很難享受後續加載的成果。

我在這裏見過這樣的答案,建議遠離RenderAction了......

那麼,什麼是迴避的RenderAction滯後,仍然能夠緩存,並有一個方法我可以最好的策略來自HTML和AJAX的呼叫? (以及在這種情況下如何處理緩存失效?)

回答

1

什麼是ajax在這裏做什麼? 如果從ajax和ViewResult調用正常調用,你是否返回JSonResult?

嘗試使用帶有剃鬚刀視圖的RenderAction。剃鬚刀發動機更快。 當結果被緩存時,渲染速度非常快(x1000)。

對於緩存,您是否使用[OutputCache]屬性?如果是這樣,你不能自己使緩存失效(或者我不知道它)。

或者,也許你正在使用的OutputCache與inneficiently乘以內存緩存的VaryByParam參數。

+0

是的,有時是'JsonResult',有時是'View'。我使用Razor引擎 - 緩存的服務時間很長,但第一次加載的速度非常緩慢。是的,使用OutputCache與VaryByParam(有很多參數..編輯:6) – Madd0g 2012-03-02 08:52:50

+0

你不應該有太多的參數,因爲緩存將使用太多的內存。它會回收第一個緩存的項目並減慢頁面的速度。緩存memoryUsed = viewText^paramValuesCount。如果paramsCount = 6並且paramValuesCount = 1000使用內存= 10K^6000 =溢出)並且緩存......只要它被緩存就可以回收項目。 – Softlion 2012-03-05 09:14:58

+0

目前我更擔心'RenderPartial'的性能,問題的緩存部分更多的是概念性的,如何在使用輸出緩存時進行DRY – Madd0g 2012-03-05 15:45:46