2

画像OutputCache属性でキャッシュされたビューがありますが、ページが表示されたことを記録するカウンターをインクリメントする必要があります。どうすればよいですか?

独自のカスタムActionFilterAttributeを作成し、アクションフィルターの実行順序を使用してこれを記録することを考えましたが、それが機能するかどうかはわかりません。

例えば。

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

まず、ここでの私の仮定は、OutputCacheが呼び出され、ページがキャッシュされた場合、コントローラーコードは実行されないということです。

私が推測している次の問題は、IncrementViewCountFilterがquestionIdを認識しないため、何をインクリメントするかをどのように知るかです(メインのインデックスコードが実行される前に実行されるため)。

次に、IncrementViewCountFilterがquestionIdを認識していて、ヒット数が多い場合は、DBに常に書き込む必要はありませんが、特定の数に達した場合にのみ、u'フラッシュします。 ' 出力。

誰か考えがありますか?

4

4 に答える 4

6

さて、いくつかのオプションがあります。

ドーナツキャッシング

サーバー側のオプションの 1 つに「ドーナツ キャッシング」があります。 ドーナツ キャッシングでは、ページの大部分をキャッシュし、ページの一部 (ドーナツの真ん中の穴) をキャッシュしないようにできます。ドーナツのキャッシングについてはこちらで説明されており、私はこれを使用して大成功を収めました。

画像ベースのトラッカー

もう 1 つのオプションは、ページ上の画像に、ヒットを記録するサーバー側アクションを実際にロードさせることです。これは次のようになります

<img src="/controller/action"> 

アクションが最後に空の画像を提供するページで。

クライアント側の追跡

最後のオプションは、クライアント側の追跡です。クライアント側でスクリプトが実行され、AJAX を使用してサーバー上の何かを呼び出してヒットを記録します。Google は Analytics パッケージにこのようなものを使用しています。トラッキング メカニズムと同じドメインにいる場合 ... メイン ページが次の場合のように:

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

そしてトラッカーはオンです

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

その後、あなたは元気になるはずです。

トラッカーが別のドメインにある場合、これは注意が必要です ( JSONPまたは比較的安全なクロスサイト スクリプティングを可能にする他のメカニズムを使用してこれを処理する必要があります)。

于 2008-12-10T15:01:09.777 に答える
1

フィルターは、OnActionExecuting に渡される ActionExecutingContext.ActionParameters から questionId を取得できます。ヒット数のキャッシュについては、キャッシュを使用します。:)

于 2008-12-10T14:42:38.907 に答える
1

MVC パイプラインを使用しないページやその他のアセットに使用できるため、良いオプションである HttpModule を使用することもできます。ドーナツ キャッシング (http://mvcdonutcaching.codeplex.com/)、MVC フィルター、および HttpModule を組み合わせて使用​​し、キャッシュされたページのすべての種類の分析を記録します。

于 2012-07-13T19:52:16.737 に答える
0

MVC 側についてはわかりませんが、これを WebForms で行っていた場合、これは出力キャッシュ置換別名ドーナツ キャッシングの候補になるように思えます。

于 2008-12-10T14:22:46.780 に答える