Asp.net mvc 網站之速度優化 -- 頁面緩存

網站速度優化的通常方法

因爲網站最重要的用戶體驗就是速度,特別是對於電子商務網站而言。html

通常網站速度優化會涉及到幾個方面:前端

1. 數據庫優化 — 查詢字段簡歷索引,使用數據庫鏈接池和持久化,如今還有種趨勢,就是選擇使用No SQL做爲補充;數據庫

2. 數據緩存 — 使用Memcached等;緩存

3. 負載均衡 — 使用ngnix等負載均衡

4. 頁面緩存 — 將.aspx, .jsp等動態頁面緩存或靜態化爲.html頁面前端優化

5. 前端優化 — Yahoo 14條前端優化原則。jsp

城江湖(Incity.me)針對 2 數據緩存, 4 頁面靜態化, 5 Yahoo 14條優化原則作了具體的實踐,並得到了實際效果,之後的系列文章會舉出一些實踐方法和列出部分代碼,此次主要針對頁面緩存進行說明。優化

 

哪些地方須要頁面緩存?

以InCity爲例,首頁商品分類幫助中心等都是用於展現商品和網站信息的,與用戶的交互相對較少。在某個時間段內(1小時),全部用戶看到的頁面都應該是相同的, 並不會由於不一樣的用戶而顯示不一樣的信息。網站

 

全局頁面緩存 OutputCache

InCity是基於ASP.NET MVC開發的,熟悉ASP.NET MVC的童鞋都知道,ASP.NET MVC自帶了一個屬性叫OutputCache,  最經常使用的是Duration和VaryByParam兩個參數:htm

MSDN:

Duration:表示頁或用戶控件進行緩存的時間(以秒計)

VaryByParam:分號分隔的字符串列表,用於使輸出緩存發生變化。

 

Code:

[OutputCache(Duration="3600" VaryByParam="type")]

public ActionResult Catalog(string type)

解釋一下:

1. 用戶第一次輸入http://incity.me/catalog/food,從後臺獲取,併爲catalog/food生成緩存頁面,3600秒內緩存頁面有效。

2. 用戶再次輸入http://incity.me/catalog/food,從緩存頁面獲取。

3. 當用戶第一次輸入http://incity.me/catalog/play的時候,由於{type}從food變成了play,數據從後臺獲取,併爲catalog/play生成緩存代碼3600秒內有效。

4.用戶再次輸入http://incity.me/catalog/play,從緩存頁面獲取。

 

局部頁面緩存 PartOutputCache

上述的解決方法對於大部分均可以處理,可是若是遇到下面的狀況怎麼辦?登陸前首頁右側的面板是顯示登陸區,登陸後是顯示用戶信息,而首頁若是採用OutputCache全局頁面緩存的話,則右側顯示不一樣的帳戶信息的。由於前面咱們已經提到,在某個時間段內(1小時),全部用戶看到的頁面都應該是相同的。

登陸前:

登陸後:

 

這時候就須要針對左側的商品做局部緩存,而對右側不使用緩存。如何達到這個效果呢?遺憾的是,這時候微軟官方的ASP.NET MVC並未提供這種功能,所以參考使用了PartOutputCache,用法以下:

[PartOutputCache(CacheDuration = 3600)]

public ActionResult ShowCase()

aspx頁面代碼則變成了

<div id=」Container」>

<!–使用了緩存–>

<%Html.RenderAction<HomeController>(p => p.IndexShowCase());%>

<!–沒有使用緩存–>

<%Html.RenderAction<HomeController>(p => p.LoginPanel());%>

</div>

相關文章
相關標籤/搜索