"Welcome back, Matt! | Log Out"
ユーザーがログインしているかどうかなどの行に沿って何かを示す上部のビットを除いて、ページ全体をキャッシュするにはどうすればよいですか?
ASP.NETMVC2を使用しています。
"Welcome back, Matt! | Log Out"
ユーザーがログインしているかどうかなどの行に沿って何かを示す上部のビットを除いて、ページ全体をキャッシュするにはどうすればよいですか?
ASP.NETMVC2を使用しています。
あなたが達成しようとしていることは、ドーナツキャッシングまたはキャッシュ置換と呼ばれます。ASP.NET MVC 2の時点では、このシナリオをサポートするための組み込みのヘルパーはありません。私の知る限り、これはMVC v.1で計画されていた機能でしたが、リリースの途中で削除されました。詳細については、このリンクhttp://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspxを確認してください。ドーナツキャッシングはASP.NET MVCで正しく機能していますか?。ここでOlegによって言及されているVaryByParamオプションは、あなたの場合には良い考えではありません。VaryByParamを使用している場合は、パラメーターの値ごとに(この場合はユーザー名ごとに)異なるバージョンのページがキャッシュに入れられます。個人的には、ページの出力全体ではなく、データをキャッシュすることを考えます。
おそらく役立ちます
<%@ OutputCache Duration="15" VaryByParam="*" %>
または。の他の値を使用しVaryByParam
ます。http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx、http://blog.maartenballiauw.be/post/2008/06/Creating-an-ASPNET-MVC-OutputCache-ActionFilterAttribute.aspxを参照してくださいおよびhttp://blogs.microsoft.co.il/blogs/gilf/archive/2010/07/18/asp-net-output-cache-provider.aspx。
さらに、ユーザーに依存しないスタートページがある場合は、「おかえりなさい、マット!|ログアウト」の代わりに、空のフィールド(非表示のdiv)を持つ非常に静的なウェルカムページでスタートページを置き換えることができます。その後、ユーザー名を入力するためのajaxリクエストをクライアント側で開始できます。この種のウェルカムページページは、非常に適切にキャッシュできます。
ここに回避策があります:
*通常どおりビュー全体を管理するコントローラーにOuptutCache属性を追加します。
[OutputCache(Duration = 3600, VaryByParam = "*")]
public ActionResult Index(FormCollection formCollection)
{
//Controller code
}
*キャッシュを実行したくない部分については、jquery + ajaxリクエストを使用してロードします(独自のコントローラーを使用し、OutputCache属性を使用しない):
<div id="loginContainer"></div>
$(document).ready(function() {
$.post('controller/action', postdata, function(data) {
if (data.success == true) {
//Populate the container with the obtained data
}
});
});
ビューは出力キャッシュから取得され、ロードされると、ログイン情報を取得するための要求が実行されます。うまくいけば、それは非常に迅速な要求であり、ユーザーは遅延に気付かないでしょう。
サポートされていません!=不可能
http://www.klopfenstein.net/lorenz.aspx/output-donut-caching-attribute-asp-net-mvc-partial-requests
http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx
nuget経由でこれを取得します:http: //mvcdonutcaching.codeplex.com/
LogOnPArtialのアクションを追加して、_Layout.cshtmlでHtml.PartialからHtml.Actionに変更できるようにします。
@Html.Action("_LogOnPartial","Account",true)
これtrue
は、これをキャッシュから除外するという除外パラメータです。アクションは、それが含まれているページがキャッシュされている場合でも呼び出されます。これは、キャッシュされていないドーナツの「穴」です。
キャッシュするAbout.cshtmlなどのページで、DonutOutputCache属性を適用します。これにより、新しいフレームワークはページをキャッシュしているときにページを検査し、アクションを除外した場所にフラグを追加できます。
良い点は、_LogOnPartialがキャッシュされず、ページの残りの部分がキャッシュされ、About()アクションが実行されない間、さまざまなユーザーに対して更新されることです。DonutOutputCache属性を使用して作成した_LogOnPartialアクションでキャッシュを構成することもできますが、間隔はより頻繁またはより少なく、または他のパラメーターによって異なります。これにより、パーシャルのページを作成でき、キャッシュ更新ロジックはパーシャルごとに個別に構成されます。
IMOこのツールは、MVCでのキャッシングが実装されるべきだと私が想像した方法とまったく同じです。