2013-03-21 2 views
0

를 사용하여 페이지의 여러 버전을 캐시 어떻게 제품 페이지의 성능을 향상시키기 위해 캐싱을 구현하기로 결정했다.면도기 동적 쿼리 및 WebCache를

각 페이지에는 제품의 이미지를 대량으로 포함되어 있습니다.

은 내가 면도기보기에 다음 코드를 만들었습니다. 결과에를

@foreach (dynamic p in data) 
{ 
<a href="~/Products/View/@p.ProductID" 
<img src="~/Thumbnail/@p.ProductID"></a> 
} 

캐싱 코드는 잘 작동하지만 새로운 쿼리 문자열 매개 변수를 전달할 때 (페이지의 버전을 변경) :

@{ 
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); 
} 
} 

다음 코드와 데이터를 사용하고 있습니다 브라우저는 신고 된 현금화 시간과 동일합니다.

페이지의 모든 버전을 캐싱하는 방법은 무엇입니까?

감사

올렉

답변

0

아주 간단한 방법은 문자열에 키 (productID를) 변환 할 수 있습니다 및 cacheItemKey의 이름을 추가합니다.

그래서 당신은 라인을 변경하는 것이 좋습니다 :

var cacheItemKey = "products"; 

읽고 :

var cacheItemKey = "products" + productID.ToString(); 

이것은 당신이 찾고있는 행동을 생산한다 - 기본적으로 VaryByParam 설정을 흉내 낸.

ps. 제발 어떤 종류의 방어적인 코드도 추가하지 않았다는 것을 명심하십시오. 을해야합니다.

희망이 있습니다.

+0

데이빗 감사합니다. 그러나 "방어적인 코드를 추가하는"것은 무엇을 의미합니까? 나는 이것에 익숙하지 않다. – user879356

+0

'ToString()'을 호출하기 전에 아마도'productID'에'NULL'을위한 테스트가 있다고 생각했지만 데이터에 문제가 있다면 샘플 코드의'AsInt()'에서 실패 할 것입니다. .. '방어 코드'란 단순히 데이터 유형과 관련된 가정을 테스트하는 코드를 추가하는 것을 의미합니다. 위키피디아의 Defensive Programming에 대한 링크는 다음과 같습니다. 당신이 허용 대답으로 내 대답을 표시 할 경우 http://en.wikipedia.org/wiki/Defensive_programming는 –

+0

나는 매우 감사하게 될 것입니다. 좋은 하루 되세요. –