剃刀の表示を変更したり、再コンパイルしたり、15〜20分待つと、最初のヒットでレンダリングするのに3〜20秒かかることがあります。変更後にビューを再コンパイルする必要があることを理解しています。私はまた、アプリケーションが一定期間活動しなくてもアンロードされることを理解していますが、最初のヒットでは1回限りのペナルティになると思いました。しかし、私にとっては、すべての単一のページに適用されるようです。各ページの最初のヒットでASP.Net MVC3のパフォーマンスを向上させるにはどうすればよいですか?
私のホームページを例にとります。 YSlowによると、コンポーネントが15個あり、重量が250K(これはMiniProfilerの追加jqueryリファレンスを含む)の「B」です。 MiniProfilerから、私は最初の行(http:// localhost:80)で約500msを見ます。私はこれがビューのコンパイルを含むと仮定しています。しかし、私はFind:Indexのために1200msを見ます。 SQLコールはありません。最初のヒット時の合計ロード時間は約3000msで、その後のヒット数は約40msです。
いくつかの部分的なビューを持つ別のページでは、親ビューは「検索」に2400msかかります。部分ビューの1つには1000msがかかります。親ビューはレンダリングに3200msかかります。そして、最大の影響は、7000msという、最初の行(http:// localhost:80/User/Dashboard)にあります。このページには3つのクエリだけがあり、合計クエリ時間は100msです。総負荷時間は15000ms以上です。後続のヒットは約250msです。
セットアップはASP.Net MVC 3、Ninject、EF4.2、Razorビューエンジン、ELMAH、NLog、Html5Boilerplate、およびMvcMiniProfilerです。私は重複プロジェクトを作成し、Ninject、ELMAH、NLog、およびMvcMiniProfilerを削除しました。パフォーマンスはほんのわずかでした。 1つの領域に約15台のコントローラと約40のビューがあります。
この正常なパフォーマンスですか? Azureにデプロイすると、ローカルでのテストよりも(自然に)悪化します。改善のための提案はありますか?
編集: IIS/localhostでのコンパイル後の最初のヒットは(リリースモードとコンパイルdebug = falseの場合)約15秒です。リリース時に実行されているAzureのデプロイメントは、最初のヒットが速くなりますが、依然として5〜10秒の範囲です。私はDavid Ebboのプロジェクトを試みましたが、劇的なことは何も見ませんでした。
は、通常のパフォーマンスのような音はありません。それらの時はひどいです。私ははるかに多くのコントローラとビュー、11のクラスライブラリ+最終的なMVCプロジェクトにまたがる非常に大きなMVCプロジェクトを持っています。私の見解(*いくつかの*多くの部分的なビューを持つもの)は、最初のヒットで(そしてデータベース呼び出しを含む)20ミリ秒以上かかることはめったにありません。 –
これをチェックしてください:http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html – tugberk
@tugberk、yup ..私もプリコンパイルされたビューを使用します。しかし、私はまだドナルドが経験している性能低下を期待していません。 –