0
我決定實施緩存以提高產品頁面的性能。如何使用Razor動態查詢和WebCache緩存多個頁面版本
每一頁都包含大量的產品圖片。
我在Razor視圖中創建了以下代碼。
@{
var productID = UrlData[0].AsInt();
var cacheItemKey = "products";
var cacheHit = true;
var data = WebCache.Get(cacheItemKey);
var db = Database.Open("adldb");
if (data == null) {
cacheHit = false;
}
if (cacheHit == false) {
data = db.Query("SELECT * FROM Products WHERE ProductID = @0", productID).ToList();
WebCache.Set(cacheItemKey, data, 1, false);
}
}
我使用的數據用下面的代碼:
@foreach (dynamic p in data)
{
<a href="~/Products/View/@p.ProductID"
<img src="~/Thumbnail/@p.ProductID"></a>
}
緩存代碼工作得很好,但通過新的查詢字符串參數時(改變頁面的版本)的結果瀏覽器與宣佈的兌現時間相同。
如何緩存每個版本的頁面?
感謝
奧列格
謝謝大衛,那樣做!但是什麼意思是「添加任何防禦性代碼」?我不熟悉這一點。 – user879356 2013-03-26 15:05:19
我正在考慮在調用'ToString()'之前可能在'productID'上測試'NULL',但我認爲如果數據出現問題,它可能會在示例代碼中的AsInt()失敗。 「防衛性代碼」我只是想添加代碼來測試通常與數據類型相關的假設。 下面是維基百科關於防禦性編程的條目的鏈接,該鏈接說得比我的要好得多。 http://en.wikipedia.org/wiki/Defensive_programming – 2013-03-26 18:28:40
如果您將我的答案標記爲已接受的答案,我將不勝感激。祝你有美好的一天。 – 2013-03-26 18:30:49