特定のラボWebアプリケーション(ASP.NETで記述)を修正しようとしています。エンドユーザーがバーコードスキャナーを使用してデータを入力する、迅速なデータ入力に使用されるページがあります。サンプル(または試験管)でバーコードをスキャンするたびに、そのバーコードに基づく実際のデータがテキストフィールドに入力され、ブラウザに次のフィールドにタブで移動するように指示されます。スキャンしている2つのバーコードと、データ入力を受け取る2つのテキストフィールドがあります。他のフィールドの多く(実際にはすべて)は、データを変更する必要がないため、サンプルの特定のトレイに対してすでにデフォルト設定されている可能性があります。このデータ入力はすべて速度に関するものです。タブ(onblurイベント)がWCFサービスへのAJAX呼び出しを使用するようにフォームを修正しました。それはとても速いです。問題は、(サンプル標本に基づいて)テストを保存するためにフォームを送信するときです。フォームは全ページのポストバックを使用します。私の目標は、最終的にバックエンドアーキテクチャを再設計して、データを保存するときにページ全体のポストバックを排除し、そのためにもWCFAJAX呼び出しを使用することです。しかし今のところ、私はページがとても遅い理由を理解しようとしています。実際、速度低下の原因はポストバックです。速度が低下するSQLクエリがいくつかありますが、速度が低下するのは、11,000のコレクションサイトを含むドロップダウンが原因だと思います。リストは、ページが読み込まれるたびに読み込まれます。このドロップダウンにその量のデータを入れてページの読み込み時間を短縮する方法はありますか?そのドロップダウンを、上位5〜10個の一致を含むオートコンプリートコントロールのタイプに変更する必要がありますか(Google検索の動作と同様)、ドロップダウンをそこに保持してページの負荷を減らすことでパフォーマンスを向上させる方法はありますか?時間?それ' ■現在、ページの読み込みに約3秒かかります。ページの読み込み時間を短縮する方法を知っている人はいますか?
=================
2011年9月16日更新
いくつかの変更を加えました。これらは、検証エラーなしでフォームを送信した時間に基づいています。キャッシュはまだ実装していません。まず、延長戦がどこから来たのか知りたいですか?誰か知っている?
2.8s(onload 3.55s)-元のコード
2.5s(onload 3.47s)-Not Page.IsPostbackチェックアラウンドドロップダウンリスト
2.22s(onload:2.79s)-11,000以上のコレクションサイトをドロップダウンから削除し、1つのクライアント名を配置するそこにプラスクライアントオプションがない場合の1つ(上部)
FirebugNetタブがこれらの時間をどのように追加しているか理解していません。それらは合計時間にはなりません。なぜそうなるのでしょうか?余分な遅れはどこから来ていますか?
356 ms
1 ms
1 ms
0 ms
2 ms
4 ms
5 ms
12 ms
4 ms
13 ms
24 ms
11 ms
12 ms
11 ms
13 ms
16 ms
11 ms
33 ms
20 ms
29 ms
12 ms
2 ms
2 ms
67 ms
9 ms
2 ms
2 ms
15 ms
2 ms
3 ms
16 ms
1 ms
1 ms
2 ms
1 ms
3 ms
6 ms
6 ms
5 ms
5 ms
1 ms
2 ms
=========
743 ms (total doesn't match ???)
最後の変更後のコード:
Public Overrides Sub BindNonViewstateLists()
'bind the client name drop down list, and keep track of the old value
'and whether or not it changed. Note that we will only use clients with
'status in a configurable list.
If (Not Page.IsPostBack) Then
'Dim clientDataTable As System.Data.DataTable = ApplicationContext.ClientManager.LoadAllForDDL(ApplicationContext.WorkflowConfig.WorkFlowDefinition("QuickDataEntry").GetSetting("ClientStatuses", "1"), "client.name", "client.identifyingnumber")
'ApplicationContext.DropDownListHelper.BindDDL(DDLClientName, clientDataTable, "Text", "Value", String.Empty)
Dim li As New ListItem("--- Client not available ---", CType(0, String))
DDLClientName.Items.Insert(0, li)
Dim li2 As New ListItem("Testing Client", CType(54321, String))
DDLClientName.Items.Insert(1, li2)
End If
...