문제

이미지 outputCache 속성과 함께 캐시 된보기가 있지만 페이지가 보았다는 기록을 늘려야합니다. 어떻게 할 수 있습니까?

나는 내 자신의 Custom ActionFilterAttribute를 만들고이를 기록하기 위해 액션 필터 순서를 사용하는 것에 대해 생각했습니다. 그러나 그것이 작동할지 확신 할 수 없습니다.

예를 들어.

[IncrementViewCountFilter(Order=1)]
[OutputCache(Duration=60,Order=2)]
public ActionResult Index(int questionId)
{ ... }

첫째, 여기서 내 가정은 outputCache가 호출되고 페이지가 캐시되면 컨트롤러 코드가 실행되지 않는다고 가정합니다.

다음 문제는 imprementViewCountFilter가 QuestionID에 대해 알지 못할 것이므로, 기본 색인 코드가 실행되기 전에 실행되기 때문에 어떻게 증가 해야하는지 알 수 있다는 것입니다.

둘째, imprementViewCountFilter가 QuestionId를 알고 있다면 .. 그리고 그것은 많은 타격을 받고 있다면, 당신은 그것이 DB에 항상 쓰기를 원하지 않을 것입니다 .. 그러나 그것이 특정 숫자에 도달 할 때만 .. 그리고 u 'flush' '출력.

누구든지 생각이 있습니까?

도움이 되었습니까?

해결책

글쎄, 당신은 몇 가지 옵션이 있습니다.

도넛 캐싱

서버 측 옵션 중 하나는 '도넛 캐싱'입니다. 도넛 캐싱 대부분의 페이지를 캐시하고 페이지의 일부를 캐시되지 않도록 허용합니다 (도넛 중간의 구멍). 도넛 캐싱 여기에 설명되어 있습니다, 그리고 나는 그것을 큰 성공으로 사용했습니다.

이미지 기반 추적기

또 다른 옵션이 있습니다 이미지 페이지에 실제로 적중을 기록하는 서버 측 작업을로드합니다. 이것은 모양이 될 것입니다

<img src="/controller/action"> 

행동이있는 페이지에 빈 이미지를 제공합니다 결국.

클라이언트 측 추적

마지막 옵션은입니다 클라이언트 측 추적 - 일부 스크립트가 클라이언트 측에서 실행되는 경우 AJAX를 사용하여 서버에서 무언가를 호출하여 적중을 기록합니다. Google은 분석 패키지에 이와 같은 것을 사용합니다. 추적 메커니즘과 동일한 도메인에있는 경우 메인 페이지가 다음과 같이

http://www.domain.com/home/action

그리고 추적기가 켜져 있습니다

http://www.domain.com/tracking/action

그러면 괜찮을 것입니다.

추적기가 다른 도메인에있을 때 까다로워집니다 (사용 사용을 처리해야합니다. JSONP 또는 비교적 안전한 크로스 사이트 스크립팅을 허용하는 다른 메커니즘).

다른 팁

필터는 ActionExecutingContext.actionParameters에서 QuestionID를 가져올 수 있으며, 이는 onactionExecuting으로 전달됩니다. 히트 카운트를 캐시하는 것은 캐시를 사용하십시오. :)

MVC 파이프 라인을 사용하지 않는 페이지 및 기타 자산에 사용할 수 있기 때문에 좋은 옵션 인 httpmodule을 사용할 수도 있습니다. Cached 페이지의 모든 유형의 분석을 기록하기 위해 MVC 필터 및 HTTPModule 인 Donut Caching (http://mvcdonutcaching.codeplex.com/)의 조합을 사용합니다.

나는 MVC 측에 대해 모른다. 그러나 내가 웹 forms에서 이것을하고 있다면 이것은 그것이 후보가 될 것 같다. 출력 캐시 대체 일명 도넛 캐싱.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top