0

ASP.Net 4.0/C# アプリケーションに 250 行と 4 列のリストビューがあります。レンダリングされたページ サイズ (トレースから) は 650,000 バイトです。リストビュー全体が更新パネルにあります。

リストビューは、リストビュー レコードの表示/追加/編集/削除操作を容易にします。

すべての POSTBACK アクション (つまり、編集クリック、削除クリック) により、サイズが 112,000 バイトの POSTBACK 要求と、最大 650,000 バイトの AJAX 応答が発生します。

リストビューは、ページの宣言型データ ソース (SQLDataSource) からデータを取得します。そして、リストビューは各往復でバインドされます。

接続が遅いと、これらの AJAX 呼び出しが完了するまでに 2 ~ 3 分かかるため、すべての呼び出しでやり取りされるデータを減らしたいと考えています。

私が試したこと - リストビュー全体の更新パネルを削除し、それぞれに更新パネルを追加しました:

  • ItemTemplate の内容
  • AlternateItem テンプレートの内容
  • テンプレートの内容を編集する
  • テンプレートの内容を挿入

更新パネルの HTML のみが返されるため、各行にテンプレートを使用すると、AJAX 応答のサイズが縮小されることを期待していました。残念ながら、そのようには機能しないようです。

私の場合の問題をどのように解決できるかについての情報はありますか?

これを調べてくれてありがとう。

4

3 に答える 3

1

これを行うための最善の方法は、ASP.NETユーザーコントロールを使用せず、代わりにJavaScript、JSON、HTML、およびサーバー側のWebサービス/httpハンドラーを使用してこれをクリーンに行うことです。

そうすれば、サーバーからクライアントに大きなHTML応答を送信する必要がありません。データを更新して再バインドする必要がある場合も制御できます。

于 2012-08-28T14:06:05.877 に答える
1

UpdatePanelの問題は、実際の AJAX を使用していないことです。代わりに、ASP.NET はいくつかの非常に巧妙なハックを使用して、部分的なページ更新の錯覚を作成します。バックグラウンドで、ページのライフサイクル全体が実行されます。これは、完全なViewStateが前後に送信されることも意味します。

より高速なエクスペリエンスが必要な場合は、UpdatePanels を使用しないでください。代わりに、プレーンな HTML コントロール (できればサーバー コントロールではない) を使用し、JavaScript とサーバー側の Web サービス (WebAPI や WCF サービスなど) を使用して、クライアント側の要求に応答します。

これらのリクエストとレスポンスには、一部のJSONデータのみが含まれ、マークアップは含まれません。データを最小限に抑えることができます。たとえば、ユーザーが行を削除した場合、行の ID をサービスに送信するだけで、成功または失敗が返されます。クライアントは JavaScript を使用し、おそらくKnockoutJSのようなものを使用して結果をレンダリングします。これにより、オーバーヘッドが最小限に抑えられ、パフォーマンスが向上します。

于 2012-08-28T14:09:33.680 に答える
0

全体のサイズの問題が関係していると思いますViewState。その理由は、すべてのポストバックで、たとえそれが AJAX ポストバックであっても、すべてのリクエストViewStateで一緒に移動するためです。何も変更せずにできる唯一のことは、IIS 側で圧縮を有効にすることです。これにより、少なくとも応答が圧縮されて送信され、ブラウザが圧縮解除を処理します。

最善の方法は、まったく使用せずUpdatePanelScriptManagers代わりに、WCF Web サービスを呼び出して、jQuery (または任意のフレームワーク) を使用して AJAX 要求を作成することです。これにより、ページのライフサイクル全体がトリガーされるわけではなく、ViewStateリクエストごとに が送信されるわけではありません。

于 2012-08-28T14:14:26.857 に答える