asp.net輸出緩衝的使用

來源:互聯網
上載者:User

在asp.net仲使用output cache 非常簡單。只需在頁面或者自訂控制項上聲明,即可以控制頁面或者控制項的緩衝策略。

例如:

1 <%@ OutputCache Duration ="10" VaryByParam="*" %>

 

這樣就聲明了一個頁面的緩衝策略。緩衝的存續時間為10秒,任何通過GET或者POST方式傳遞到頁面的參數都會使頁面的輸出緩衝失效。

頁面outputcache指令的具體參數在MSDN上有詳細說明,在此就不贅述了。

使用輸出緩衝應注意以下:

asp.net頁面在緩衝產生以後,失效之前,所有對該頁面的請求,直接從記憶體中取出並送顯,將不會經曆asp.net的頁面生命週期。也就是說在頁面聲明周期內的各種事件內的代碼,將不會被執行。

 

往往頁面不能夠整體被緩衝,有些部門需要及時更新,這就需要部分頁緩衝或者緩衝後替換。 

部分頁緩衝

為自訂控制項聲明緩衝,頁面中調用該控制項,控制項將會緩衝,其餘部分不被緩衝。

被緩衝後的控制項一樣不經曆生命週期,將不能和頁面互動。

緩衝後替換

MSDN給出三種緩衝後替換方案:

1. Substitution控制項實現緩衝後替換

<asp:Substitution ID="Substitution1" runat="server" MethodName="GetDate" />

C#代碼:

protected static string GetDate(HttpContext context)
    {
        return "<b>" + DateTime.Now + "</b>";
    }

注意:(1)substitution控制項的MethodName屬性所指定的方法必須為靜態方法並具有HttpContext型別參數。

   (2)在上例中的GetDate方法中,因為沒有經曆頁面的生命週期,在方法體內Request、Session、Cookies等等頁面屬性都是停用。

 

2.Response.WriteSubstitution 方法

Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetDate));

 GetDate方法同上。

 

3. AdRotator控制項

Adrotator伺服器控制項在內部實現對緩衝後替換的支援

 

另外在使用時我發現一種比較另類的緩衝後替換,比較適合於懶人。那就是用iframe,在iframe記憶體放動態更新的內容。

如果頁面大面積需要緩衝,而只有一小塊不能緩衝,而且這一塊的動態更新需要依賴Page屬性(比如Session)或者控制項的值,可以考慮iframe。

 

最後,在使用中發現這樣一個問題。asp.net會緩衝兩個版本:一個是首次開啟時被緩衝的版本,一個頁面建立緩衝之後第一次postback的版本。

也就是說在頁面被緩衝之後,第一次postback會執行頁面的生命週期。以後的請求,如果是首次請求則送顯首次開啟的緩衝版本,如果是postback則送顯第一次postback時的緩衝版本。不清楚為什麼會是這樣?為什麼頁面被緩衝之後,第一次postback還會起作用?還請各位大俠點撥。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.