您可以提高您站點的訪問速度,那麼就需要用到cache(緩存),通常可以我們使用cache來處理經常檢索的結果或不經常改變的數據結果。 你將學習: l 如何使用緩存來提高網站的響應速度。 本章介紹的功能: l WebCache helper |
緩存來提高網站的響應
每當人們請求您站點中的頁面時,Web服務器都會做一些工作,以便執行請求。對於其中一些包括有服務器端執行代碼的頁面,Web服務器可能會執行很長時間來完成任務。比如從數據庫中檢索數據。這些任務獲取在較少數量的的請求時並不需要太長的時間,但是如果網上有了大量的流量,所有用戶都進行了獨立請求的時候,會導致Web服務器增加很多的工作,從而使執行速度變的緩慢。這最終會影響到網站的性能。
在這種情況下,改善您網站性能的方法之一便是緩存數據。如果您的網站上有在請求時響應的是相同數,且數據並不需要針對個人進行改變,另外在時間上也並不敏感。那麼我們可以將數據緩存,在用戶每次請求時並不在Web服務器上重新計算,而是在第一次訪問時就將數據放到緩存中,在下一次請求時,只獲取緩存中的數據。
在一般情況下,您緩存的信息並不經常改變。當你把信息放到緩存,它將存儲在Web服務器上的內存中。你可以指定它應該被緩存多久,從幾秒鐘到幾天。當緩存期限到期,該信息自動從緩存中刪除。
注意 緩存中的項目並沒有過期,但可能會因爲其他原因可能會被刪除。例如,Web服務器可能暫時低位運行內存,它回收內存的方法之一便是移出緩存項。正如你看到的,即使你放入緩存信息,你必須檢查,以確保它在您使用時仍然存在。 |
想象您的網站有一個頁面,顯示當前的溫度和天氣預報。爲了得到這種類型的信息,您可能會發送一個請求到外部服務。因爲這個信息並不需要有太大的改變(例如,在兩個小時內)因爲和外部請求服務需要時間和帶寬,所以這是一個很好的被緩存項目。
ASP.NET包括WebCache helper,使得您很容易地將緩存功能添加到網站,並添加到緩存中的數據。在此過程中,您將創建一個頁面用來緩存的當前的時間。當然這不是一個真實的例子,因爲當前的時間是不經常改變,而且不需要複雜的計算。然而,這是一個很好的方式來說明緩存在工作。
1. 添加一個新頁面網站名爲WebCache.cshtml。
2. 在頁面中添加以下代碼和標記:
@{
var cacheItemKey = "Time";
var cacheHit = true;
var time = WebCache.Get(cacheItemKey);
if (time == null) {
cacheHit = false;
}
if (cacheHit == false) {
time = @DateTime.Now;
WebCache.Set(cacheItemKey, time, 1, false);
}
}
<!DOCTYPE html>
<html>
<head>
<title>WebCache Helper 例子</title>
</head>
<body>
<div>
@if (cacheHit) {
@:Found the time data in the cache.
} else {
@:Did not find the time data in the cache.
}
</div>
<div>
頁面上的時間被組成存爲: @time.
</div>
</body>
</html>
在cacheItemKey代碼示例中,使用time定義了一個緩存項,當您緩存數據時,需要爲緩存定義一個名稱,在整個網站中,這個緩存是獨立存在的。
該代碼首先讀取time緩存項中的值,如果返回值不爲空,說明代碼從緩存項目中獲取了time緩存,並保存到變量time中。
然而,如果緩存條目不存在(也就是說,它是空的),代碼會設置time的值爲當前時間,將它添加到緩存中,並設置一分鐘的到期時限。如果頁面請求沒有在一分鐘之內進行,那麼緩存中的項目將被丟棄。(默認緩存項到期時間是20分鐘)。
此代碼說明的問題是您應該總是使用時緩存數據。在您得到的新的緩存之前,總是先檢查WebCache.Get方法是否返回null值。請記住,緩存條目可能因爲其他一些原因已過期或可能已被刪除,所以從來不能保證任何給定的項目在緩存一直存在。
3. 在瀏覽器中運行WebCache.cshtml。(請確保頁面在選定的工作區中,然後再運行它。)當您第一次請求頁面時,時間數據不在緩存中,代碼將添加時間值到緩存中。
4. 在瀏覽器中刷新WebCache.cshtml。這一次,時間數據是從緩存中獲取的。請注意你最後一次瀏覽網頁以來的時間一直沒有改變。
5. 等待一分鐘後緩存被清空,然後刷新頁面。再次表明時間數據在緩存中沒有找到,更新的時間將被添加到緩存項中。
原文:
資源: