您能夠提升您站點的訪問速度,那麼就須要用到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.
等待一分鐘後緩存被清空,而後刷新頁面。再次代表時間數據在緩存中沒有找到,更新的時間將被添加到緩存項中。
原文:
資源: