網站速度優化的一般方法
由於網站最重要的用戶體驗就是速度,特別是對於電子商務網站而言。
一般網站速度優化會涉及到幾個方面:
1. 數據庫優化 — 查詢字段簡歷索引,使用數據庫連接池和持久化,現在還有種趨勢,就是選擇使用No SQL作為補充;
2. 數據緩存 — 使用Memcached等;
3. 負載均衡 — 使用ngnix等
4. 頁面緩存 — 將.aspx, .jsp等動態頁面緩存或靜態化為.html頁面
5. 前端優化 — Yahoo 14條前端優化原則。
城江湖(Incity.me)針對 2 數據緩存, 4 頁面靜態化, 5 Yahoo 14條優化原則做了具體的實踐,並獲得了實際效果,以后的系列文章會舉出一些實踐方法和列出部分代碼,這次主要針對頁面緩存進行說明。
哪些地方需要頁面緩存?
以InCity為例,首頁,商品分類,幫助中心等都是用於展示商品和網站信息的,與用戶的交互相對較少。在某個時間段內(1小時),所有用戶看到的頁面都應該是相同的, 並不會因為不同的用戶而顯示不同的信息。
全局頁面緩存 OutputCache
InCity是基於ASP.NET MVC開發的,熟悉ASP.NET MVC的童鞋都知道,ASP.NET MVC自帶了一個屬性叫OutputCache, 最常用的是Duration和VaryByParam兩個參數:
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>