2016-03-28 3 views
0

コントローラーからActionResultを返すとビューが実行されますか?または、ActionResultは後で実行されるものへの参照ですか?コントローラアクションからActionResultを返すと、実際にその時点でビューが実行されますか?

コントローラーの操作でActionResultリターンの一部をキャッシングしました。コントローラのアクション内で、このことを考えてみましょう:

if(isCached(someKey)) 
{ 
    return cachedActionResult; 
} 
else 
{ 
    var model = new ALazyLoadedModel(); 
    return View(model); 
} 

だから、最初の実行後、全体ActionResultオブジェクトがキャッシュから返されます。 (そのモデルには遅延ロードされたプロパティがたくさんあるので、これらのプロパティがビューから呼び出されるときに実行の苦痛があります。したがって、モデルの実行とビューの実行は基本的に同じです。

しかし、パフォーマンスの向上は私が望んだものではありませんでした。モデルの作成とビューの復帰についていくらかのタイミングをとると、明らかにミリ秒単位で実行されています。Stopwatch戻すにはわずか0.0958ミリ秒かかります(つまり、1秒間に約1/10000秒)。そのモデル/ビューが何をするかに基づいて、私はこれを少し信じ難いと感じます。

は、ここで私は疑うものだ - ActionViewのリターンはビューを実行し、実際にをしない、それだけでビューを初期化し、後で実行され、それへの参照を返します。これが当てはまる場合、このキャッシング戦略は明らかに役に立たないでしょう。

私の疑惑は正しいですか?または、実際にreturn View()はビューを実行して、ビューの実行は私が思ったよりもはるかに高速ですか?

+0

あなたのケースの 'cachedActionResult'は実際のレンダリングされたビューではなく、ビューを返す* intention *のみを含みます。応答全体を収集するには、出力キャッシュが必要です。 – haim770

答えて

1

はい、ASP.NET MVCの中心的なアイデアです。コントローラのメソッドの結果は、実行結果ではなく何かを実行する意図があります。

return View(model)という文字通り、フレームワークに伝えることを意味します。このメソッドが呼び出されたときに対応するビューをルックアップし、このモデルを使用してレンダリングしてください。この作業はコントローラのメソッドの外部で呼び出されたコードで行われます。

関連する問題