因爲網站最重要的用戶體驗就是速度,特別是對於電子商務網站而言。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小時),全部用戶看到的頁面都應該是相同的, 並不會由於不一樣的用戶而顯示不一樣的信息。網站
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,從緩存頁面獲取。
上述的解決方法對於大部分均可以處理,可是若是遇到下面的狀況怎麼辦?登陸前首頁右側的面板是顯示登陸區,登陸後是顯示用戶信息,而首頁若是採用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>