6

OutputCacheASP.NET MVC でこの属性を使用するのは初めてです。


静的ページ

次のようなコードを使用して、サイトの静的ページで有効にしました。

[OutputCache(Duration = 7200, VaryByParam = "None")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        //...

私の理解が正しければ、コントローラ全体を 7200 秒 (2 時間) キャッシュしました。


動的ページ

しかし、動的ページではどのように機能するのでしょうか? dynamicとは、ユーザーがフォームを送信する必要がある場所を意味します。

例として、メールフォームのあるページがあります。そのコードは次のようになります。

public class ContactController : Controller
{
    //
    // GET: /Contact/

    public ActionResult Index()
    {
        return RedirectToAction("SubmitEmail");
    }

    public ActionResult SubmitEmail()
    {
        //In view for CAPTCHA: <%= Html.GenerateCaptcha() %>
        return View();
    }

    [CaptchaValidator]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SubmitEmail(FormCollection formValues, bool captchaValid)
    {
        //Validate form fields, send email if everything's good...

            if (isError)
            {
                return View();
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }

    }

    public void SendEmail(string title, string name, string email, string message)
    {
        //Send an email...

    }
}

ここでコントローラー全体に OutputCache を適用するとどうなりますか?

HTTP POST フォームの送信は機能しますか? また、私のフォームには CAPTCHA があります。それは方程式の何かを変えるでしょうか?

言い換えれば、動的ページでキャッシュにアプローチする最良の方法は何ですか?

前もって感謝します。

4

1 に答える 1

1

出力キャッシュを利用することで、ASP.NET MVC アプリケーションのパフォーマンスを大幅に向上させることができます。ページが要求されるたびにページを再生成する代わりに、ページを一度生成して、複数のユーザーのためにメモリにキャッシュすることができます。

実装しようとしている最初のシナリオは適切ではありません。出力キャッシュは、ビジネス ロジックに影響を与えない場合にのみ使用する必要があることに注意してください。サーバーの負荷と Sql データを減らしたい場合は、頻繁に使用されるページを取得しますが、データの更新頻度は低くします。

幸いなことに、簡単な解決策があります。キャッシュ後の置換と呼ばれる ASP.NET フレームワークの機能を利用できます。キャッシュ後の置換を使用すると、メモリにキャッシュされたページの動的コンテンツを置換できます。

http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/adding-dynamic-content-to-a-cached-page-cs

于 2015-06-25T08:23:18.353 に答える