2012-01-19 16 views
2

我有兩個不同的視圖,每個局部視圖調用500個以上的局部視圖。良好的設計告訴我,我應該將部分視圖保留在原來的位置,並從覆蓋視圖中引用它來防止代碼重複。不幸的是,性能會受到影響 - 在其他兩個視圖中複製粘貼部分視圖會產生300ms的改進。ASP MVC編譯時包含局部視圖

是否有我可以在覆蓋視圖中包含局部視圖,獲得不使用實際Partial()調用的性能優勢,同時又不必維護重複代碼?注 - 我知道我可能寫一些VS插件,將複製粘貼視圖代碼,但我正在尋找其他選項...

+2

好設計告訴**我**沒有500+部分視圖**: - )** – gdoron

+0

我傾向於同意!無論如何,在這種情況下我沒有太多選擇。 –

+2

RenderPartial()調用是否在循環中?如果是,那麼最好將迭代移動到Partial,並儘可能少地調用RenderPartial()。您也可以考慮爲Partial創建一個HTML助手。也可以在「Release」模式下測試,因爲在Debug中HtmlHelper.RenderPartial()不會緩存路由。 – IUnknown

回答

3

觀光嘗試可能提高性能:

  • 使用@{Html.RenderPartial("_foo");}而不是@Html.Partial("_foo")包括部分
  • 永遠做你的標杆在Release模式。與調試模式相比,ASP.NET MVC執行了許多優化和緩存。

如果前2項建議並沒有得到所需要的性能,那麼你可以嘗試用自定義的HTML輔助函數將生成的HTML片段替換部分。如果部分的HTML不是非常複雜,這可以工作。

+0

我建立在發佈,並且RenderPartial優化沒有做任何事情。不過,我會把它變成一個HTML助手。謝謝。 –

0

我要約會我自己在這裏,但你有沒有考慮過使用server side include來注入局部視圖的代碼,而不是調用它?我完全沒有證據,經驗或主觀,這將會更快。值得嘗試的東西。

+0

顯然剃鬚刀不支持服務器端包含。 http://stackoverflow.com/questions/5314476/how-do-you-include-html-or-asp-file-using-razor –