|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-02-27, 12:02 PM | #1 (permalink) |
榮譽會員
|
ASP.NET的緩衝技術
出處: http://www.codeproject.com/aspnet/cachingaspnet.asp
ego(翻譯) 原作:Smitha Vijayan 介紹 大量的網站頁面是採用動態的方式,根據用戶提交的不同請求新增產生頁面。正如我們所知的,動態頁面有助於根據用戶要求來提供定制的動態內容。動態頁面也利於獲取在資料庫中每時每刻更新的資料。缺點是為每個用戶請求產生同一頁面增加了系統預先配置。 為克服此問題,一些網站用頁面產生引擎對所有頁面產生html靜態頁面。但這樣產生的頁面對所有用戶的請求內容都是相同。 ASP.NET 提供了緩衝技術有助於我們最大程度地解決這個問題。它能緩衝輸出的頁面,儲存在存儲器當中,緩衝用戶請求的內容。緩衝的特點可以根據不方式來定制的。 緩衝一個頁面 為緩衝一個頁面輸出的內容,我們要在面面頂部指定一個 @Output快取 指令。語法如下所顯示: <%@ Output快取 Duration=5 VaryByParam="None" %> 如你所見,這條指令有兩個內容。他們是: Duration - 被緩衝輸出的內容有效期是多少秒。在時間超過指定的有效期後,過期的緩衝內容會刪除,並會在下次用戶請求中重新使用頁面產生緩衝內容。再次的緩衝內容過10秒後此程序又會重複。 VaryByParam - 這個內容是必須的,並且指明查詢字串參數不同使緩衝產生變化。在上面的程式碼片斷中,我們指定 VaryByParam 內容是 「None」 ,這意味著不論傳遞的查詢字串參數如何不同所返回的頁面內容是相同的。 如果對同一頁面的兩次請求含不同的查詢字串參數,如:.../PageCachingByParam.aspx?id=12 和.../PageCachingByParam.aspx?id=15 ,這應該產生不同的頁面內容,指令應該是: <%@ Output快取 Duration=10 VaryByParam="id" %> 對這樣兩種不同請求的頁面內容每一個都會被緩衝 Duration 內容指定的時間長度。。 為了指定多個參數的情形,要使用分號來分隔參數名稱。如果我們指定 VaryByParam 內容為「*」,緩衝內容會因傳遞的不同查詢字串參數而不同。 一些動態頁面要根據不同的瀏覽來產生不同的內容。在這種情況下就要規定緩衝輸出內容要因不同瀏覽器而不同。@Output快取 指令要改為: <%@ Output快取 Duration=5 VaryByParam="id" VaryByCustom="browser" %> 這條指令不僅讓緩衝輸出內容因瀏覽器不同而不同,而且也會因瀏覽器版本不同而不同,如 IE5、IE 6、Netscape 4、Netscape 6 都會獲得不同輸出的緩衝版本。 緩衝局部頁面 有時我們可能只是想緩衝一個頁面的一小部分。例如,我們可能用這樣的頁面,對所有瀏覽用戶都有同樣的內容,這個頁面有一個標題。這個標題可能是某個文本/圖像組成,並且每天資料都可能改變。在這種情況下,我們就會只想緩衝這個標題一天的有效期。 解決方法是把標題內容放入一個用戶控件當中,然後指定這個用戶控件應該被緩衝。這個技術被稱為局部緩衝(fragment caching)。 為了指定應該被緩衝的用戶控件,我們利用 @Output快取 指令,就像整個頁面緩衝的用法一樣。 <%@ Output快取 Duration=10 VaryByParam="None" %> 在上面的指令中,用戶控件緩衝有效期是 Duration 內容指定的時間(10 秒)。不論查詢字串和瀏覽器類型/版本如何,緩衝輸出的內容是相同的。。 資料緩衝 ASP.NET 也支持作為對像類型資料的緩衝。我們可以把對像存儲在記憶體中,在我們應用程式的不同動態頁面中使用它們。利用 快取 類可以實現這個特點。緩衝的生存週期與應用程式的相同。對象可以以鍵值對(name value pairs)的形式儲存於緩衝當中。如下所顯示插入一個字串進緩衝: 快取["name"]="Smitha"; 這個存儲的字串值可以像這樣得到: if (快取["name"] != null) Label1.Text= 快取["name"].ToString(); 為把對像插入緩衝中,可以使用 快取 類的 Add 方法或者不同版本的 Insert 方法。這些方法可能允許我們使用這個 快取 類提供的更強大功能,下面是利用了 Insert 方法的一個重載: 快取.Insert("Name", strName, new 快取Dependency(Server.MapPath("name.txt"), DateTime.Now.AddMinutes(2), TimeSpan.Zero); 頭兩個參數是是鍵名和被插入的對象。第三個參數是 快取Dependency 類型,幫我們對名為 name.txt 文件設定值的依賴項。因此一旦這個文件發生改變,在緩衝中的這個值會被刪除。我們可以指定 「null」 值來表明沒有依賴項。第四個參數指定了從緩衝刪除這個值的時間。最後一個參數是緩衝過期時間可調的參數,它指明了從最後一次訪問緩衝時間到它被刪除的時間間隔。 當可用系統記憶體不多時,緩衝自動從記憶體中刪除使用少的專案。這個程序被稱為淨化(scavenging)。我們可以為增加進緩衝中的專案指定優先級,以便某些專案能得到優先處理: 快取.Insert("Name", strName, new 快取Dependency(Server.MapPath("name.txt"), DateTime.Now.AddMinutes(2), TimeSpan.Zero, 快取ItemPriority.High, null); 枚舉類型 快取ItemPriority 給成員設定不同的優先級。快取ItemPriority.High 給專案分配了個高優先級,以使該專案減少被緩衝刪除的可能性。 要點 如果你還是老的 ASP 頁面並且利用 Response.Expires 內容緩衝頁面輸出,那麼他們也可以像 ASP.NET 支持這個內容一樣被保留。 快取 類的 Insert 方法會用相同鍵名的專案覆蓋任何已存在專案。 快取ItemPriority.NotRemovable 優先權可以與 快取.Insert 方法一起用於設定一個專案的優先級,以便這個專案不會在淨化期間從緩衝中被刪除 結語 本文中,我盡可能對 ASP.NET 的緩衝技術多個可選方便提供一個總的概括。為保持本文的簡短扼要沒有提供詳細的解釋和說明。 在一個啟用緩衝的含子控件嵌套風格中可用局部緩衝。我還沒有測試如何利用這一點,因此也就沒有包括這個技巧的說明。同時 快取 類的 Insert 方法也就沒有在此討論了。我希望本文對讀者而言是一個研究多姿多彩的 ASP.NET 世界的一個良好的開端。 |
送花文章: 3,
|