ASP.NET2.0揭祕讀書筆記之八——頁面輸出快取

iDotNetSpace發表於2009-05-12

      引言

     利用快取,可以極大提高web應用程式的效能。
     ASP.NET頁面中執行最慢的操作是資料庫的訪問。開啟一個資料庫連線並讀取資料是很慢的操作。改進效能的最好方法是改進訪問資料的程式碼而不是訪問資料庫的程式碼。
      ASP.NET 2.0 Framework支援下列型別的快取:
     頁面輸出快取
     區域性頁面快取
     資料來源快取
     資料快取

     一、 使用頁面輸出快取
     可以給一個頁面新增指令啟動頁面輸出快取。例如,下面程式碼使得輸出的頁面能快取15秒。

 

Code


ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    void Page_Load()
    {
        lblTime.Text = DateTime.Now.ToString("T");
    }

http://www.w3.org/1999/xhtml" >

    Cache Page Output


   
   


   

   


     使用引數改變輸出快取
     有時候我們同一個頁面在根據傳入的不同引數時會顯示不同的內容,如果這種情況使用上面的快取就會導致傳入任何不用引數都會顯示相同的快取內容,這個時候可以使用VaryByParam屬性來解決這個問題。VaryByParam屬性會在傳入不用引數時使頁面快取新的例項。

     傳入的引數名稱為id。
     可以給VaryByParam屬性賦兩個特殊的值。
     none——傳入的引數都被忽略了,只有一個版本的頁面快取;
     *——傳入引數的任意變化都會建立一個新版本的頁面快取。
      如果希望根據不只一個引數值的變化來建立不用的頁面快取版本,那麼可以用分號分隔一組引數列表給VaryByParam屬性。

       基於控制元件變化的輸出快取
       VaryByControl屬性用於根據頁面中的特定控制元件的不同值來建立不用版本的頁面快取。
      

        id="dropCategories"
        DataSourceID="srcCategories"
        DataTextField="Name"
        DataValueField="Id"
        Runat="server" />

      基於頭變化的輸出快取
      還有一個選擇是使用VaryByHeader屬性,使得在特定瀏覽器頭的值變化時,可以建立不用版本的緩衝頁面。
幾個標準的瀏覽器頭在每次頁面請求時都會傳遞,這些頭包含:
     Accept-Language——代表請求頁面中使用者最希望的有優先順序順序的人類語言列表;
     User-Agent——代表請求頁面裝置的型別;
     Cookie——代表當前域名下建立的瀏覽器的cookie。

      基於瀏覽器變化的輸出快取
      如果想針對不用瀏覽器使用不用快取版本,可以使用VaryByCustom屬性。該屬性接受一個特殊的browser值。當VaryByCustom的值為browser時,瀏覽器的型別和主版本號被認為重要並需要考慮的。
      設定快取位置
      使用指令的Location屬性指定頁面被快取在哪裡。該屬性包含下面值:
     Any——頁面被快取在瀏覽器、代理伺服器端和web伺服器端;
     Client——快取在瀏覽器;
     DownStream——頁面被快取在瀏覽器和任何的代理伺服器端;
     None——頁面不快取;
     ServerAndClient——頁面被快取在瀏覽器和web伺服器端;


     建立頁面輸出快取檔案依賴
     可以在一個快取頁面和硬碟上的一個檔案(或者一組檔案)之間建立一個依賴。當檔案修改時,快取頁面自動失效並在下次頁面請求時重新生成。

 

Code


ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    void Page_Load()
    {
        Response.AddFileDependency(MapPath("Movies.xml"));
    }

http://www.w3.org/1999/xhtml" >


    Output Cache File Dependency


   
   

   
   
   

   
            id="grdMovies"
        DataSourceID="srcMovies"
        Runat="server" />
   
            id="srcMovies"
        DataFile="Movies.xml"
        Runat="server" />
   
   

   

 

     上面程式碼顯示了當前時間,注意,時間直到Movies.xml檔案被修改時才會變化。程式碼中使用了      Response.AddFileDependency()方法在快取頁面和磁碟上的單個檔案間建立了依賴。如果需要依賴多個檔案,則需要使用AddFileDependencies()代替。


     使用程式設計的方式設定頁面輸出快取過期
     可以使用Response.RemoveOutputCacheItem()方法,以程式設計的方法,從快取中移除一個頁面。例如我們前臺產品頁面被快取了,當在後臺新增新的產品時就可以使用程式設計方式移除前臺快取的產品頁面。
protected void dtlMovie_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("~/MovieList.aspx"));
        Response.Redirect("~/MovieList.aspx");
    }


      建立頁面輸出快取配置
      通過在Web配置檔案中配置頁面輸出快取,從而將這些配置應用於多個頁面。可以建立一個快取配置(Cache Profile),將使網站的快取更容易管理。

   
 
     
       
         
       

     

   

 

      下面程式碼使用了Cache1Hour配置。該配置設定於指令的CacheProfile屬性。

 

Code


ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml" >


    Output Cache Profile


   
   

   
   
   

   


     可以給快取配置設定和獨立頁面的指令一樣的屬性。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-594861/,如需轉載,請註明出處,否則將追究法律責任。

相關文章