本文介紹通過緩存來提高網頁的執行效率。
1.ASP.NET Output Caching
當一個網頁頻繁被訪問的時候,我們可以通過把整個網頁緩存來提高執行效率。這樣作的優點是,當用戶再次訪問這個網頁的時候,被格式化好的HTML會被直接送顯。
為什麼會存在這種效果呢?我們通過ASP.NET的基本運行機制來解釋這個問題。ASP.NET是一個動態的服務器,當用戶從客戶端提供一個請求的時候,那麼服務端的IIS接受到請求,然後根據用戶的提示執行相應的代碼。執行代碼之後生成一個結果。這個結果會被緩存成一個HTML放在Server端,然後通過響應用戶的Request將這個HTML傳送到客戶端。在這之中我們發現,很多時候,用戶的請求實際上並沒有多大的變化,可能請求的都是相同的內容。這時候執行一次代碼的成本就會相當的高。既然我們已經生成了一個HTMl ,我們何必要在重新執行一次代碼呢?我們直接把HTML送顯就可以了。
l Output Cache是一項非常有效的增強訪問性能的技術,由於IIS的一些特性,默認情況下Output Cache是打開的,但是要對一些請求進行緩存,還需要開發者進行定制。
l 定制Output Caching
對於Output Caching的定制,我們有兩種方法,一種是基於底層的API技術,一種是基於高層的@Output Caching,一旦Output Caching被定制過,那麼這個網頁就會在第一次被訪問的時候生成cache,直到請求過期為止。
我們著重點是使用高層的@Output Caching標簽來設置,因為API技術的編程難度比較大,和ASP.NET快速編程理念不相符。
l 代碼示例:通過使用Output Cache定義一個緩存頁,顯示當前時間,大家可以看到,當這個頁面被緩存之後,刷新時,當前時間顯示不發生變化。
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
TimeMsg.Text = DateTime.Now.ToString();
}
</script>//head以前。
protected void Page_Load(object sender, EventArgs e)
{
TimeMsg.Text = DateTime.Now.ToString();
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
l 示例講解
在這個頁面中<%@ Output Cache Duration = “60” VaryByParam = “none”%>
這段話定義了頁面將要被緩存,並且,其緩存時間為60秒,並在一個頁面被緩存之後,通過定義VaryByParam屬性,它不會因為request接受的參數而改變,只有在60秒之後,頁面自動清除緩存,此時,第一個訪問提供了新的緩存。
l 代碼示例:數據訪問的小示例,相對顯示當前數據示例,這個示例更能顯示緩存頁之後刷新的性能優勢。
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
TimeMsg.Text = DateTime.Now.ToString();
}
</script>//head以前。
protected void Page_Load(object sender, EventArgs e)
{
TimeMsg.Text = DateTime.Now.ToString();
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>//最上面