0

私は特定のラボWebアプリケーション(ASP.NETで書かれています)を修正しようとしています。エンドユーザーがバーコードスキャナーを使用してデータを入力するクイックデータ入力用のページがあります。サンプル(またはテストチューブ)上のバーコードをスキャンするたびに、そのバーコードに基づいて実際のデータをテキストフィールドに入力し、ブラウザに次のフィールドに移動するよう指示します。スキャンしている2つのバーコードと、データ入力を受け取る2つのテキストフィールドがあります。他のフィールドの多くは(実際にはすべて)、そのデータを変更する必要がないので、サンプルの特定のトレイに既にデフォルト設定されている可能性があります。このデータ入力はすべて速度に関するものです。私はtabbing(onblurイベント)がWCFサービスへのAJAX呼び出しを使用するようにフォームを修正しました。それは非常に速いです。問題は、(サンプルの標本に基づいて)テストを保存するためのフォームを提出するときです。フォームは全面ポストバックを使用します。私の目標は、バックエンドアーキテクチャを最終的に再設計して、データを保存するときに全面ポストバックをなくし、WCF AJAX呼び出しを使用することです。しかし今のところ、私はページがなぜそんなに遅いのか理解しようとしています。実際、遅さを引き起こすのはポストバックです。物事を遅くするいくつかのSQLクエリがありますが、私はそれが11,000のコレクションサイトを含むドロップダウンに起因すると考えています。リストは、ページが読み込まれるたびに読み込まれます。このドロップダウンでその多くのデータを使ってページの読み込み時間を短縮できる方法はありますか?そのドロップダウンを、トップ5〜10のマッチ(Google検索の仕組みと同様)で自動補完コントロールに変更する必要がありますか、そこにドロップダウンを維持してページの読み込みを減らしてパフォーマンスを向上させる方法があります時間?現在、ページを読み込むのに約3秒かかります。誰もがページの読み込み時間を高速化する方法を知っていますか?ドロップダウンリストの値とビューステートがページサイズに追加され、ページの読み込み時間が増加する

=================

2011年9月16日更新

は、いくつかの変更を加えました。これらは、検証エラーなしでフォームを送信したときに基づいています。まだキャッシングを実装していませんでした。まず、余分な時間はどこから来たのか理解したいですか?誰か知っていますか?

2.8s(onloadイベント3.55s) - 元のコード
2.5S(オンロード3.47s) - ドロップダウンリストの周り
2.22s(onloadイベント:2.79s)チェックPage.IsPostback未置く - で11,000+コレクションのサイトを削除しますドロップダウンして、そこにクライアント名を1つ入れてください。さらに、クライアントオプションが見つからないために1つ(上にあります)

Firebug Netタブでこれらの時間をどのように追加しているのか分かりません。彼らは合計時間に合わない。それはなぜでしょうか?余分な遅れはどこから来ていますか?

enter image description here

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 
... 
+0

はあなたがすべてのポストバックまたは単に最初の時間にドロップダウンにデータをロードしてください行くより深いビットで覗いするdynaTraceのAJAX版を使用してみてください? – slobodans

+0

私たちがリストをロードする行のデバッグをオンにしただけで、ポストバックが発生するたびに(テストがサンプルのサンプルに保存されるたびに)表示されます。ドロップダウンリストに値を設定するメソッドへの呼び出しをどのようなコードで囲むことをお勧めしますか? (私は明日もオンラインに戻ります) – MacGyver

+0

アプリケーションがすべてのポストバックのドロップダウンリストに新しい項目を追加しない場合、リストデータを最初の時刻にロードすることができ、データはポストバックの間のviewstateに保存されます。したがって、すべてのポストバックにロードする必要はありません。 – slobodans

答えて

1

javascript(解凍/解析/実行)はUIスレッドをブロックしています。

Firebugのが

+0

私はこれにまた戻っています。私はできれば今夜これを解決したいと思います。あなたはこのツールで私を助けてくれるでしょうか? – MacGyver

+0

確かに、DynaTraceはあなたに何を示していますか? –

+0

初めてプログラムを実行したときに、ワークフローに関するレポートを取得することができましたが、そこでセッションをクリアしましたが、それ以降はレポートは表示されません。 – MacGyver

0

ドロップダウン項目を読み込む魔女からのデータは、ポストバックの間で変化していない場合。 ページの最初の読み込み時にのみ、データの読み込みをドロップダウンに実行できます。

このような何か:

if(!IsPostback) 
{ 
// Load dropdown data 
} 

をドロップダウンの内容は、ポストバックの間、ViewStateに保存されます後。 これは、ポストバック後にページを表示するのに必要な時間を短縮します。

また、データのキャッシュについて考えてみましょう。 ドロップダウンに読み込むデータの量がわかりません。 これはアプリケーションレベルでキャッシュすることができますか?

関連する問題