對於復雜的導航菜單,我應該使用數據記憶體還是輸出記憶體?
我正在嘗試根據不同的標準記憶體導航菜單的各個部分。
例如,新聞和文章需要在持續時間的基礎上刷新,而登錄和個人資料的內容應該在每個使用者的基礎上進行記憶體。
我正在考慮 2 個選項 - 有沒有人願意告訴我每個選項的優缺點?如果可能的話,建議採取更好的方法!
選項1。
只需將所有需要的 html 作為字元串記憶體在數據記憶體中。需要時手動檢查使用者差異。
我(也許是錯誤的)認為這將是實現最多的工作,但也是記憶體不同部分的最有效方式。
選項 2。
為菜單的每個部分設置一個具有不同子操作的 NavigationController。(我們可以根據需要對每個子操作應用不同的 outputCacheProfile。)
但這需要我們為導航菜單的每個部分呼叫單獨的 RenderAction。由於對 Phil Haack 的一篇部落格文章的評論,我對此感到擔心:
$$ Render Action $$與發出另一個請求非常相似,因為我們需要執行路由以確保我們有適當的路由數據和上下文來呼叫操作方法。所以每次呼叫 RenderAction 都會累加。
全文在這裡:http ://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx
我認為人們普遍迴避了這個問題,因為這裡沒有正確的答案。
事實上,您選擇的實現複雜導航的架構將決定最佳的****記憶體策略。
我非常偏愛 Navigation through Partial Views with Child Actions。
我同意你的觀點,引用文件是更多的工作。我更喜歡將帶有導航選項的數據庫條目按鍵分組並由子操作的參數引用。
所以你的導航表可能看起來像這樣
grpId Title Path 1 Home Page / 1 About Page /Home/About 1 Reports Page /Reports 2 Home Page / 2 Admin Page /Admin 2 Reports Page /Reports並且您的子操作將採用 grpId
[OutputCache(Duration = 60000, VaryByParam = "grpId")] public PartialViewResult NavigationPage(int grpId)可以拉出所有導航組選項並呈現自定義導航菜單。這種形式的輸出記憶體是按時間定制的(60000 秒和您的參數)
結論:
我懷疑我沒有告訴你什麼新東西,只是證實了你已經傾向於什麼。MVC 框架非常健壯,並提供工具來很好地處理您想做的事情。使用文件和數據記憶體也是一種有效的方法,但它會更讓人頭疼,需要你自己努力去實現。
請記住: Haacks 的文章已超過 4 年(MVC 2 Beta)。從那時起,框架和輸出記憶體得到了很好的發展。您現在可以記憶體部分而不用擔心記憶體整個頁面。最近對使用 MVC 4 進行記憶體的引用並沒有直接說明 Phil 早期的擔憂,但明顯忽略了它們。