2009-06-04 6 views
5

私は、Webアプリケーションに次のような状況があります。キャッシュ部分図は

テーブル「従業員は、」列「部門」と「機能」が含まれています。どちらもドロップダウンリストです。

「機能」ドロップダウンリストのオプションは、選択した「部門」によって異なります。 (各部門には独自の関数リストがあります)

部門を変更するときは、パラメーター "DepartmentId"を持つコントローラー・アクションへのajax呼び出しを行います。コントローラアクション上の[outputcache]属性で、返される関数は部門IDごとにキャッシュされます。

私の問題はページの初期読み込みです。 ビューでコントローラアクションを呼び出して、キャッシュを利用できますか?

誰でも? 30件の意見と回答はありません..私の質問に関するコメントはありますか?あまりにも明らかだ?あまりにもハード?あまりにも変わった? Googleのための何か(私はそこに解決策を見つけられなかったaltho)?

答えて

4

Phil Haackは、Donut Hole Cachingという類似のトピックについて短いブログ投稿を投稿しました。それは良い出発点として役立ちます。

+0

これは修正されても、私はとにかく答えとしてマークしています。 –

0

ajaxではなく、ビューを生成している間に関数を直接生成するコントローラアクションを呼び出すことを意味しますか?私が正しく理解していれば、出力キャッシュのデータを取得することはできません(私は間違っているかもしれません)。とにかく、それを得ることができれば、データをもう一度デコードする必要があります。

また、部門がHttpContext.Cacheで自分をIDS

  • キャッシュに試みることができると速いあなたはもうOutputCacheを必要としない、多分それはそうだ(両方のアクションでそれらを使用し、ダブルを持っていませんキャッシング)
  • または、department/functionsの数がそれほど多くない場合は、すべての関数を持つjson構造を作成し、ビューに格納し、ajaxをまったく使用しないでください。
4

私はサブコントローラーを使用するか、依頼していることを行うために依然として部分的な要求を行います。一般的なページでは、ページ全体をキャッシュしないで、部分的なリクエストによって呼び出される異なるアクションメソッドに領域を分割します。こうすることで、各エリアで異なる期限切れでキャッシュを出力することができます。ページのライフサイクルが増えますが、キャッシュされているときは実際にはパフォーマンスに課税されません。特定の領域を維持して最適化することが、実行が開始された場合にははるかに容易です。

これは私の経験では、1つのアクションメソッドからすべてのデータを「取得」するだけで、これもajaxパターンに非常によく合います。

部分的な要求はhereとサブコントローラhere

は、この情報がお役に立てば幸いで議論されています。