1. 程式人生 > >ASP.NET快取技術學習入門---頁面快取(OutPut Caching)

ASP.NET快取技術學習入門---頁面快取(OutPut Caching)

  以前寫程式從來都沒用過快取(水平太菜),好在以前做的網站訪問量都非常的小,所以效能問題也不突出,但是如果做一個正規的專案,不論大小,快取技術是必須要使用到的。今天學習了三種常用的快取技術,下面先講第一種,非常的簡單,相信大家一定能看明白。

  先說下為什麼要用快取,在正常情況下,當一個使用者要訪問www.abc.com/index.aspx這個頁面時,他的IE會給我們的網站伺服器端發出一個瀏覽請求,我們的伺服器收到請求後就會執行index.aspx檔案相關的代碼,執行完成後生成一個HTML檔案,然後傳送給使用者的IE,如果有1000個人訪問這個頁面的話,哪伺服器就要把index.aspx的程式碼執行1000次再發送1000次,在使用頁面快取技術之後我們把index.aspx頁面快取

起來,這樣就有可能做到1000個人訪問,伺服器只執行200次程式碼,再發送1000次,與前面相比較伺服器少執行800次程式碼,大家想想看這會對伺服器的效率有多麼大的提高啊!如何做到這一點呢?請看“頁面快取”

頁面快取(OutPut Caching)


  頁面快取的使用方法非常的簡單,只需要在aspx頁的頂部加一句宣告
<%@ OutputCache Duration="60" VaryByParam="none" %>
Duration="60" 的意思是指定快取的時間為60秒,可根據情況自已設定
VaryByParam="none" 的意思是設定無引數快取(有引數的快取下面會講到)
  這兩個引數是必須的,不能預設。另外還有一個重要的引數
DiskCacheable="true|false" 意思是要不要把快取放到硬碟上,如果設為false則快取資料會放到記憶體中


  這裡需要注意一下,如果頁面資料很小的話可以把快取資料放到記憶體中,如果資料較大最好放到硬碟上,
否則會佔用大量記憶體影響伺服器執行,如果資料快取到硬碟上的話,記得要把Duration=""的值設的大一些如Duration="3600",如果設的太小,伺服器會過於頻繁的在硬碟上寫資料反而會降低效能,如果在內存中快取資料Duration""則不要設的太長,當然具體時間長短要大家自己多嘗試才知道。

  以上就是一個最簡單的頁面快取的實現方法,再來回過頭講一下原理,先看個例子:
  新建一個cache1.aspx檔案,在頁面開始處加一句<%@ OutputCache Duration="60" VaryByParam="none"

%>然後在程式碼裡寫一句Response.Write(DateTime.Now),執行後顯示出了當前時間,好,我們開始重新整理這個頁面,你會發現頁面顯示的時間停住不變,始終是第一次執行時的時間,現在,我們等待1分鐘後再刷新頁面,這時頁面顯示的時間變成了當前時間,再反覆重新整理,顯示的時間又不變了,為什麼呢?當第一個使用者請求瀏覽cache1.aspx頁時,伺服器會執行cache1.aspx的程式碼生成一個HTML傳送給使用者,同時把這個HTML快取到記憶體中,當第二次,第三次……傳送瀏覽請求時,伺服器不再執行cache1.aspx裡的程式碼而是直接把快取中的HTML發給使用者端,60秒內都是如此,60秒後快取被消除,當下一個請求出現時服務器會再執行cache1.aspx的程式碼,並把生成的HTML快取60秒……

  這裡我們要注意一個問題,如果你的部分資料要求能夠實時顯示的話,那就不能使用整頁快取了,就要使用部分快取,如何部分快取,最簡單的辦法就是自定義一個使用者控制元件,在使用者控制元件裡開頭加<%@ OutputCache Duration="60" VaryByParam="none" %>的宣告,這樣當你在某個頁面裡使用這個控制元件時,頁面裡的其他資料不會被快取,只有這個控制元件的內容會被快取,具體就說了,很簡單,大家自己試一試吧! 

注意:DiskCacheable="true|false"的設定在VS2005正式版裡不再正式支援,所以在MSDN裡找不到關於它的說明,我諮詢了微軟的講師,說是把快取放到硬碟上在實際使用中會出現一些問題.現在我們在VS2005正式版裡依然可以使用這個設定,但是會不會產生實際效果我就不清楚了,大家有知道的就說一聲吧!