我有兩個不同的視圖,每個局部視圖調用500個以上的局部視圖。良好的設計告訴我,我應該將部分視圖保留在原來的位置,並從覆蓋視圖中引用它來防止代碼重複。不幸的是,性能會受到影響 - 在其他兩個視圖中複製粘貼部分視圖會產生300ms的改進。ASP MVC編譯時包含局部視圖
是否有我可以在覆蓋視圖中包含局部視圖,獲得不使用實際Partial()調用的性能優勢,同時又不必維護重複代碼?注 - 我知道我可能寫一些VS插件,將複製粘貼視圖代碼,但我正在尋找其他選項...
我有兩個不同的視圖,每個局部視圖調用500個以上的局部視圖。良好的設計告訴我,我應該將部分視圖保留在原來的位置,並從覆蓋視圖中引用它來防止代碼重複。不幸的是,性能會受到影響 - 在其他兩個視圖中複製粘貼部分視圖會產生300ms的改進。ASP MVC編譯時包含局部視圖
是否有我可以在覆蓋視圖中包含局部視圖,獲得不使用實際Partial()調用的性能優勢,同時又不必維護重複代碼?注 - 我知道我可能寫一些VS插件,將複製粘貼視圖代碼,但我正在尋找其他選項...
觀光嘗試可能提高性能:
@{Html.RenderPartial("_foo");}
而不是@Html.Partial("_foo")
包括部分如果前2項建議並沒有得到所需要的性能,那麼你可以嘗試用自定義的HTML輔助函數將生成的HTML片段替換部分。如果部分的HTML不是非常複雜,這可以工作。
我建立在發佈,並且RenderPartial優化沒有做任何事情。不過,我會把它變成一個HTML助手。謝謝。 –
我要約會我自己在這裏,但你有沒有考慮過使用server side include來注入局部視圖的代碼,而不是調用它?我完全沒有證據,經驗或主觀,這將會更快。值得嘗試的東西。
顯然剃鬚刀不支持服務器端包含。 http://stackoverflow.com/questions/5314476/how-do-you-include-html-or-asp-file-using-razor –
好設計告訴**我**沒有500+部分視圖**: - )** – gdoron
我傾向於同意!無論如何,在這種情況下我沒有太多選擇。 –
RenderPartial()調用是否在循環中?如果是,那麼最好將迭代移動到Partial,並儘可能少地調用RenderPartial()。您也可以考慮爲Partial創建一個HTML助手。也可以在「Release」模式下測試,因爲在Debug中HtmlHelper.RenderPartial()不會緩存路由。 – IUnknown