本文是備份,原作請看:ASP.NET的OutputCache #2,學習Cache一看就懂。

http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/12/5366.aspx

 

上一篇文章(ASP.NET的OutputCache。直接看執行結果,學習Cache一看就懂)講的是底下的 VaryByParam的用法。

這個範例,則是改用 VaryByControl 的用法。

我們鎖定畫面上的下拉式選單(DropDownList控制項),來作Cache

 

  名  稱 說   明    資料來源:微軟MSDN網站
CacheProfile 取得或設定與輸出快取項目設定關聯的 OutputCacheProfile 名稱。
Duration 取得或設定快取項目保留在輸出快取中的時間。
Enabled 取得或設定值,指出是否啟用目前內容的輸出快取。
Location 取得或設定數值,判斷快取項目的位置。
NoStore 取得或設定數值,判斷是否已設定 HTTP Cache-Control: no-store 指示詞。
SqlDependency 取得或設定快取項目相依的一組成對資料庫和資料表名稱。
VaryByControl 取得或設定一組以 "分號" 分隔的控制識別項,其包含在目前頁面或使用者控制項中,用來變更目前快取項目。
VaryByCustom 取得輸出快取用來變更快取項目的自訂字串清單。
VaryByHeader 取得或設定一組以 "逗號" 分隔的標頭名稱,用來變更快取項目。標頭名稱會識別與要求關聯的 HTTP 標頭。
VaryByParam 取得以 "逗號" 分隔的查詢字串或表單(POST or GET)張貼參數清單,輸出快取會使用此清單變更快取項目。 ex:  none / * / 參數名稱

 

 

因為這部份的內容,來不及在新書上面發表,所以在Blog上面分享給讀者。新書上市-- ASP.NET專題實務(文魁出版)

採用的範例DataBase,也是書本上附的 「test資料表」。 

讀者可以把程式下載回去,玩玩看。

 

這支程式的關鍵,也只有一句話 <% @ OutputCache Duration ="30" VaryByControl ="DropDownList1"  %>

把他設定在 .aspx檔案的HTML碼裡面即可。

意思是說:快取設定30秒,鎖定 DropDownList1這個控制項。

 

HTML畫面的設定也很簡單。這個範例畫面,在中國時報、蘋果日報的網站上,還滿常見的(我不確定他們有沒有用到 Cache)

兩個控制項(DropDownList 與 GridView),搭配一個 SqlDataSource。

 

上面的HTML畫面,最重要的部份,就是兩個控制項之間的互動

當我們選取 DropDownList的任何一個選單,底下的 GridView內容會隨之變換。

要依賴 GridView的 SqlDataSource來輔助,下面這畫面是關鍵!!

P.S.  如果上面這兩張圖片的設定,您看不懂的話,那您就是剛剛入門ASP.NET的新手而已。 能力還太淺,還用不著學習 Cache這部份。

上面這些步驟,大部分的ASP.NET書籍一定會講。   您先把這一部份的基礎,學通、學熟練了,再來學Cache。

因為這步驟(上面兩張圖片)很重要,所以我的書本 Ch 9(第九章)反覆練習這個重點,衍生出各種常用的範例。

新書上市-- ASP.NET專題實務(文魁出版)

 

HTML設計畫面的原始碼如下(僅供參考):

01         Server時間(網頁執行瞬間的時間)--<font color ="red"><%=now()%> </font><p>
02             <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
03                 <asp:ListItem>==請選擇==</asp:ListItem>
04                 <asp:ListItem>政治</asp:ListItem>
05                 <asp:ListItem>教育</asp:ListItem>
06                 <asp:ListItem>其他</asp:ListItem>
07                 <asp:ListItem>娛樂</asp:ListItem>
08             </asp:DropDownList></p>
09         <p>
10
11
12             <asp:GridView ID="GridView1" runat="server" CellPadding="4" DataSourceID="SqlDataSource1">
13             ........這部份省略...........
14             </asp:GridView>
15
16
17             <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
18                 SelectCommand="SELECT [id], [test_time], [title], [class] FROM [test] WHERE ([class] LIKE '%' + @class + '%')">
19                 <SelectParameters>
20                     <asp:ControlParameter ControlID="DropDownList1" Name="class" PropertyName="SelectedValue"
21                         Type="String" />
22                 </SelectParameters>
23             </asp:SqlDataSource>

 

因為這個範例很簡單,不需要寫後置程式碼(Code-Behind)。

完全靠VS 2005 or VS 2008的畫面,拖拉點放就完成設定了。不用自己動手寫程式啦

執行結果如下:

 

 當我們點選「政治」類的文章,程式執行時間是 02:07:13秒。 

這時候你重整畫面,或是重複點選「政治」這個選項,畫面都不會動。因為已經被 Cache住了。

  • 同一個「文章分類」,除非你等待30秒,這支程式才會重新跟Server索取資料。
  • 或是你點選別的「文章分類」,這支程式才會重新跟Server索取資料。

 

Cache的好處,就是對於「非即時更新」、「變化不大」的資訊,我們可以透過 Cache的方式提供給讀者觀賞。

不需要每一次都跟 Server重新要求,這樣會浪費 Server的資源。

例如:股票市場的資訊(假設你作一個 Yahoo股市的網頁),台灣的股市是在9:00~13:30進行交易。這段時間的股票變化、漲跌,分分秒秒都不同。

你的網頁,用了 Cache那就死定了。因為觀眾看不到即時資料,就算他不斷重整畫面,也是看見「被Cache的舊資料」。

但是營業時間結束後,個股的今日漲跌已定,不再有變化。這時候使用Cache,就不需要每次都去Server / 資料庫裡面撈資料,浪費Server資源。

 

上面的解釋,您可以參考一下。或許我舉的例子,不太妥當。

因為 Cache何時該用?用在哪裡?.............都要看你的程式、客戶的需求來決定。千萬不要濫用這些功能。

===============================================================================

附檔的程式,僅供各位參考---- Sample.rar

有購買本書的讀者,可以搭配書本附的 test資料表來操作。

因為我的程式裡面,連結資料庫的帳號、密碼,都寫在Web.Config裡面,讀者請依照實際狀況修改一下。可以參考P.6-9頁(6-2節)的範例&步驟,設定自己的「資料庫連線字串」,並存在Web,config檔裡面。

或是本書的 P.14-16頁,自己修改資料庫連線字串。

 

範例的 Cache_2.aspx 就是上面的範例。

另外一個 Cache_2_old.aspx則是同一支程式(沒有Cache功能),兩個讓讀者作比較,執行起來玩玩看就知道了。

其餘的程式,則是上一篇文章的範例。

 

相關文章請看:

 

 今日值班正妹,隋棠。

創作者介紹
創作者 MIS2000 Lab 的頭像
MIS2000 Lab

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()