ASP.NETMVCはASP.NETWebFormsよりも30倍高速であるといういくつかのワイルドな意見を見つけました。実際のパフォーマンスの違いは何ですか、これは測定されており、パフォーマンスの利点は何ですか。
これは、ASP.NETWebFormsからASP.NETMVCへの移行を検討するのに役立ちます。
ASP.NETMVCはASP.NETWebFormsよりも30倍高速であるといういくつかのワイルドな意見を見つけました。実際のパフォーマンスの違いは何ですか、これは測定されており、パフォーマンスの利点は何ですか。
これは、ASP.NETWebFormsからASP.NETMVCへの移行を検討するのに役立ちます。
結論を出すために必要な種類のスケーラビリティとパフォーマンスのテストを実行していません。ScottGu は潜在的なパフォーマンス目標について議論していた可能性があると思います。ベータ版と RTM に移行するにつれて、内部でより多くのパフォーマンス テストを行う予定です。ただし、パフォーマンス テストの結果の公開に関するポリシーがどのようなものかはわかりません。
いずれにせよ、そのようなテストは実際のアプリケーションを考慮する必要があります...
ビューステートを削除し、送信された出力をプログラムで処理できるようにするだけで、私のページの 1 つを 2MB のペイロードから 200k に減らしました。
サイズだけでも、処理は同じでしたが、1 秒あたりの接続数とリクエストの速度が大幅に向上します。
私のテストでは、MVC では 2 倍から 7 倍のリクエスト/秒が示されていますが、それは Web フォーム アプリの構築方法によって異なります。「hello world」テキストだけで、サーバー側の制御がなければ、mvc は約 30 ~ 50% 高速です。
ここでの問題は、ASP.Net MVC が古い Web フォームよりどれだけ高速であっても、ほとんどの時間がデータベースにかかっているため、違いがないことだと思います。ほとんどの場合、Web サーバーは 0 ~ 10% の CPU 使用率でデータベース サーバーを待機しています。Web サイトで非常に多数のヒットが得られ、データベースが非常に高速でない限り、おそらく大きな違いに気付かないでしょう。
初期のASP.NETMVC開発からのものを見つけることができる唯一の具体的な数値は、このフォーラムスレッドにあります。
http://forums.asp.net/p/1231621/2224136.aspx
Rob Connery自身は、ScottGuがASP.NETMVCが1秒あたり8000リクエストを処理できると主張しているという声明をいくらか確認しています。
たぶん、ジェフと彼の乗組員は、このサイトの開発から何らかのヒントを与えることができます。
受け入れられている意見とは反対に、最適化された Web フォームの使用は、生のパフォーマンスの点で MVC を完全に殺します。Webforms は、MVC よりもはるかに長い時間、html を提供するタスクのために非常に最適化されています。
指標はhttp://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=dbで入手できます。
すべての単一の比較 mvc は、リストの下位中位/下位位のランキングにあり、最適化された Web フォームの使用は上位中位/上位下位位のランキングにあります。
逸話的ではありますが、これらのメトリックに対する非常に深刻な検証であるwww.microsoft.comは、MVC ではなく Web フォームによって提供されています。MVC の方が経験的に高速であった場合、MVC を選択しなかったと考える人はいますか?
私は約 1 年前に MVC の仕事を始めました。刺激を受けましたが、感銘を受けませんでした。
私はビュー ステートが大嫌いで、ASP.NET に関するあらゆる悪の根源だと考えています。これが私がそれを使用しない理由であり、完全に正直に言うと、なぜあなたはそうしますか?
私は基本的に ASP.NET MVC フレームワークの概念を採用し、それを独自の方法で構築しました。私はいくつかのことを変更しました。動的再コンパイルを中心に、コントローラー ラッピング コードまたは URL ルーティング コードを作成しました。
さて、ASP.NET MVC アプリケーションは、使用方法に基づいてより高速になるとまで言えます。WebForms を完全に放棄すると、ASP.NET のライフ サイクルとオブジェクト モデルが膨大になるため、より高速になります。
あなたが書いているとき、あなたはアーミーをインスタンス化しています...いやいや、あなたのビューのレンダリングに参加するオブジェクトの軍団です。これは、ASPX ページ自体で最小限の動作を表現する場合よりも遅くなります。(Visual Studio での ASPX ページのサポートはまともなので、ビュー エンジンの抽象化については気にしませんが、コードの肥大化や変更できないため、概念として WebForms を完全に削除し、基本的にすべての ASP.NET フレームワークを削除しました。私のアプリケーションを配線するもの)。
動的再コンパイル (System.Reflection.Emit) に依存して、必要に応じて特別な目的のオブジェクトとコードを発行する方法を見つけました。このコードの実行はリフレクションよりも高速ですが、最初はリフレクション サービスを通じて構築されます。これにより、私の MVC フレーバー フレームワークに優れたパフォーマンスがもたらされましたが、非常に静的に型付けされました。文字列や名前と値のペアのコレクションは使用しません。代わりに、私のカスタム コンパイラ サービスは、参照型が渡されるコントローラー アクションへのフォーム ポストを書き換えます。舞台裏では多くのことが行われていますが、このコードは高速で、WebForms や MVC フレームワークよりもはるかに高速です。
また、私は URL を記述しません。呼び出すコントローラー アクションを後で指定する URL に変換されるラムダ式を記述します。これは特に高速というわけではありませんが、壊れた URL よりはましです。静的に型付けされたリソースと静的に型付けされたオブジェクトがあるようなものです。静的に型付けされた Web アプリケーションですか? それが私が欲しいものです!
より多くの人にこれを試してみることをお勧めします。
Visual Studio で作成されたプロジェクト。1 つは mvc4 テンプレートで、もう 1 つは WebForm (従来型) です。そしてWCATで負荷テストを行った結果がこれ、
2500 rps を超える可能性があります
パフォーマンス キラーは、MVC Bata または RC のバグであることが判明しました。そして、バンドルのものを削除すると、パフォーマンスが向上します。現在、最新バージョンではこれが修正されています。
これに答える方法は本当にありません。MVC はデフォルトで Web フォーム ビュー エンジンを使用し、任意の数のカスタム ビュー エンジンを使用するように構成できるため、パフォーマンスの比較が必要な場合は、より具体的にする必要があります。
パフォーマンスは何をしているかによって異なります... 通常、MVC は asp.net よりも高速です。主な理由は、Viewstate が存在しないことと、MVC がデフォルトでポストバックよりもコールバックでより多く機能するためです。
Web フォーム ページを最適化すると、MVC と同じパフォーマンスが得られますが、多くの作業が必要になります。
また、CSS と JavaScript を組み合わせて縮小したり、画像をグループ化したり、スプライトとして使用したりするなど、Web サイトのパフォーマンスを向上させるのに役立つ MVC (および Webform) のナゲットもたくさんあります。
Web サイトのパフォーマンスは、アーキテクチャに大きく依存します。関心事が適切に分離されたクリーンなコードは、よりクリーンなコードをもたらし、パフォーマンスを改善する方法についてより良いアイデアをもたらします。
このテンプレート「Neos-SDI MVC テンプレート」を参照してください。これは、デフォルトでパフォーマンスが大幅に向上したクリーンなアーキテクチャを作成します ( MvcTemplate のWeb サイトを確認してください)。