2

HttpHandler を使用して、ASP.Net Web アプリケーションで画像を動的に提供します。パフォーマンスの問題があります (Firfox/Firebug/YSlow が HttpRequest が多すぎると報告しています)。

場合によっては、ページごとに 50 ~ 100 枚の画像があります。各ノードに独自の画像がある 3 つのツリービュー (ビジネス ユニット/カテゴリ/オブジェクト) ;)

各アイテムの画像 URL は次のように動的に設定されます...

SomeImage.ImageUrl = "/image.axd?ImageId={0}";

注: どのイメージが必要になるかは、実行時にしかわかりません。

追加: 画像はサーバー ファイル システム、リソース ファイル、およびデータベースにあります。ユーザーは独自の画像をアップロードしてシステム オブジェクトに関連付けることができ、ImageHandler は各画像の場所を動的に決定します)。

web.config では、httphandler が構成され、期待どおりに動作します... add verb="GET" path="image.axd" type="Vision.OnsightManager.ImageHandler"

HttpHandler では、各画像要求に応答して生の画像バイトが返されます。そのため、イメージ ハンドラの WriteResponse() メソッドでは、イメージ バイトが返されます。

context.Response.BinaryWrite(バイト);

すべての画像は正しく表示されますが、多くの画像が表示される場合、予想どおりアプリのパフォーマンスに問題があります...

質問:

各画像に対して生成されるすべての HttpRequests を最小限に抑えるために、画像数を減らすこと以外に、どのようなアプローチをお勧めしますか?) たぶん、単一の Http リクエストに結合しますか?

イメージ マッピング (オフセットを使用した単一結合イメージ) などを使用して、複数の CSS 要求を 1 つの要求に結合することに関する記事を読みましたが、特定のシナリオに適したものはないようです。

とても感謝しております!

4

3 に答える 3

5

繰り返されるリクエストに対するサーバーのプレアシュアを減らす1つの方法は、ページのキャッシュ機能を使用することです。

HttpHandlerのResponse.Writeの前にこれを追加します。

// Set for how long you want the image to be cached.
context.Response.Cache.SetExpires(DateTime.Now.AddDays(1)); 
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetValidUntilExpires(true);
context.Response.Cache.VaryByParams["ImageId"] = true;

これにより、サーバーは結果をキャッシュします(ImageIdパラメーターに依存します)が、これはもちろん、最初の画像ではなく、同じ画像に対する繰り返しの要求にのみ役立つため、実際の問題がどこにあるかによって異なります。

アプリケーションについてあまり知らなくても、より良い解決策を見つけるためにいくつかの変更を加える必要があるようです...

于 2009-01-28T09:24:59.607 に答える
2

これは、画像を処理する優れた方法とは思えません。最初の例では、画像を A​​SP ページ経由で取得するのではなく、実際の画像としてサーバーに配置することで、サーバーの負担を軽減する必要があります。

次に、コンテンツの有効期限を将来のある段階に設定します。これにより、少なくとも後続のリクエストが簡単になります。

また、画像を少し合理化しようとします。3 つのツリー ビューがある場合でも、多くの共通要素を見つけることができます。

最後に、実装には多少の作業が必要ですが、サーバー側の画像を組み合わせて、ツリーに対して 1 つの画像のみを返すことができます。これを行う場合は、サーバーに負荷がかかるため、結果をどこかにキャッシュするようにしてください。発生している間。

于 2009-01-28T08:59:36.427 に答える
1

asp.net 構成ファイルでワーカー スレッドの数を増やしてみてください。

詳細については、http:
//williablog.net/williablog/post/2008/12/02/Increase-ASPNET-Scalability-Instantly.aspx http://msdn.microsoft.com/en-us/library/を参照してください。 ms187024.aspx

また、HTTP 標準では、単一サーバーへの同時接続数がクライアントあたり 2 接続に制限されていることも付け加えておきます。IE は確かにこの制限を実施していますが、Firefox は 4 に制限されていると私は信じています。

于 2009-01-28T09:00:15.130 に答える