[解決済み】ASP.NET MVCアプリケーションのパフォーマンスを向上させるにはどうしたらいいですか?
質問
ASP.NET MVCアプリケーションのパフォーマンスを向上させるにはどうすればよいですか?
どのように解決するのですか?
改善策の候補を以下にまとめました。
一般
- プロファイラを使用して、アプリケーションのメモリリークやパフォーマンスの問題を発見してください。 ドットトレース
- 実運用時やパフォーマンスプロファイリング時には、デバッグモードではなく、リリースモードでサイトを実行してください。リリース・モードの方がはるかに高速です。デバッグモードでは、あなた自身のコードにあるパフォーマンスの問題を隠すことができます。
キャッシング
-
使用方法
CompiledQuery.Compile()
を再帰的に回避することができます。 クエリの再コンパイル 表現 -
変更されにくいキャッシュ
を使用したコンテンツ
OutputCacheAttribute
不要なアクションを省くために 実行されます。 - 頻繁にアクセスする非機密情報にはCookieを使用する
-
利用方法
タグ
と期限切れ - カスタムを書く
ActionResult
メソッドが必要です。 -
の使用を検討する。
RouteName
を使用してルートを整理し、それを使って生成します。 また、式木ベースのActionLinkメソッドを使用しないようにしましょう。 - ルート解決キャッシュ戦略の実装を検討する
-
繰り返しのコードを
PartialViews
レンダリングしないようにする xxxx 回:もし 同じビューで同じパーシャルを300回呼び出すことになるなら、おそらく何かがあるのでしょう。 が間違っているのです。 説明とベンチマーク
ルーティング
-
使用方法
Url.RouteUrl("User", new { username = "joeuser" })
で経路を指定します。 ASP.NET MVCのパフォーマンス by Rudi Benkovic -
このヘルパーを使用して、キャッシュルート解決を行う
UrlHelperCached
ASP.NET MVCのパフォーマンス by Rudi Benkovic
セキュリティ
- フォーム認証を使用し、頻繁にアクセスする機密データを 認証チケット
DAL
- LINQでデータにアクセスする場合 IQueryableに依存する
- Repositoryパターンを活用する
- クエリのプロファイルを作成する。 ユーバープロファイラー
- クエリのセカンドレベルキャッシュを考慮し、スコープとタイムアウトを追加する。 NHibernate セカンドキャッシュ
ロードバランシング
-
リバースプロキシを使って、クライアントの負荷をアプリインスタンスに分散させます。(Stack Overflowでは HAProxy ( MSDN ).
-
使用方法 非同期コントローラ は、外部リソースの処理に依存するアクションを実装するために使用します。
クライアント側
- クライアントサイドを最適化するには、次のようなツールを使用します。 YSlow に対して パフォーマンス向上のための提案
- UIのコンポーネントを更新するためにAJAXを使用し、可能な限りページ全体の更新を避けます。
- コンテンツ配信のためのパブサブアーキテクチャ(例:Comet)の実装を検討する。 タイムアウトに基づく再読み込み。
- チャートとグラフの生成ロジックを可能な限りクライアント側に移行する。グラフ生成 は高価な活動です。クライアントサイドに移行することで、サーバーに負担がかかりません。 不要な負担をかけることなく、ローカルでグラフを操作することができます。 リクエストに対応します(例:Flex charting。 jqbargraph , その他のJqueryCharts ).
- スクリプトやメディアコンテンツにCDNを使用し、クライアント側の読み込みを改善する(例. グーグルCDN )
- ミニファイ コンパイル - スクリプトのサイズを改善するために、JavaScriptを使用します。
- Cookieはリクエストごとにサーバーに送信されるため、Cookieのサイズを小さくしておくこと。
- の使用を検討します。 DNSとリンクのプリフェッチ 可能であれば
グローバル設定
-
Razor を使用する場合、以下のコードを global.asax.cs に追加してください。デフォルトでは、Asp.Net MVC は aspx エンジンと razor エンジンでレンダリングします。これは、RazorViewEngine のみを使用します。
ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());
-
web.config に gzip (HTTP 圧縮) と静的キャッシュ (画像、CSS、...) を追加します。
<system.webServer> <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/> </system.webServer>
- 未使用のHTTPモジュールの削除
-
HTMLが生成されたらすぐにフラッシュし(web.configに)、使用していない場合はviewstateを無効化します。
<pages buffer="true" enableViewState="false">
関連
-
[解決済み] Could not find a part of the path ... binroslyncsc.exe
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] enumを列挙するには
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】Html.PartialとHtml.RenderPartial、Html.ActionとHtml.RenderActionの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMLにSystem.Stringを埋め込む
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法