1. ホーム
  2. .net

[解決済み】ASP.NET MVCアプリケーションのパフォーマンスを向上させるにはどうしたらいいですか?

2022-04-08 18:53:02

質問

ASP.NET MVCアプリケーションのパフォーマンスを向上させるにはどうすればよいですか?

どのように解決するのですか?

改善策の候補を以下にまとめました。

一般

  • プロファイラを使用して、アプリケーションのメモリリークやパフォーマンスの問題を発見してください。 ドットトレース
  • 実運用時やパフォーマンスプロファイリング時には、デバッグモードではなく、リリースモードでサイトを実行してください。リリース・モードの方がはるかに高速です。デバッグモードでは、あなた自身のコードにあるパフォーマンスの問題を隠すことができます。

キャッシング

  • 使用方法 CompiledQuery.Compile() を再帰的に回避することができます。 クエリの再コンパイル 表現
  • 変更されにくいキャッシュ を使用したコンテンツ OutputCacheAttribute 不要なアクションを省くために 実行されます。
  • 頻繁にアクセスする非機密情報にはCookieを使用する
  • 利用方法 タグ と期限切れ - カスタムを書く ActionResult メソッドが必要です。
  • の使用を検討する。 RouteName を使用してルートを整理し、それを使って生成します。 また、式木ベースのActionLinkメソッドを使用しないようにしましょう。
  • ルート解決キャッシュ戦略の実装を検討する
  • 繰り返しのコードを PartialViews レンダリングしないようにする xxxx 回:もし 同じビューで同じパーシャルを300回呼び出すことになるなら、おそらく何かがあるのでしょう。 が間違っているのです。 説明とベンチマーク

ルーティング

セキュリティ

  • フォーム認証を使用し、頻繁にアクセスする機密データを 認証チケット

DAL

ロードバランシング

  • リバースプロキシを使って、クライアントの負荷をアプリインスタンスに分散させます。(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">