0

我試圖修復一個特定的實驗室Web應用程序(用ASP.NET編寫)。有一個頁面用於快速輸入數據,最終用戶使用條碼掃描器輸入數據。他們每次掃描樣品(或試管)上的條形碼時,都會將基於該條形碼的實際數據輸入到文本字段中,並通知瀏覽器選擇下一個字段。有兩個條形碼掃描,兩個文本字段接收數據輸入。其他領域的許多(實際上全部)領域可能已經缺席了特定的樣品盤,因爲這些數據不需要改變。這個數據輸入是關於速度的。我已經修復了表單,以便tabbing(onblur事件)使用對WCF服務的AJAX調用。這很快。問題是他們提交表格以保存測試(基於樣本標本)。該表單使用完整頁面回發。我的目標是最終重新設計後端架構,以在保存數據時消除整頁回發,併爲此使用WCF AJAX調用。但現在,我只是想弄清楚爲什麼頁面太慢了。事實上,回傳會導致緩慢。有幾個SQL查詢會減慢速度,我認爲速度緩慢是由於其中包含11,000個收集站點的下拉菜單。該列表每次加載頁面時都會加載。有沒有辦法通過這個下拉菜單中的大量數據來加快頁面加載時間?我是否需要將該下拉列表更改爲某種類型的自動完成控制功能(與Google搜索的工作方式類似),還是可以通過保持下拉菜單來提高性能,但是可以減少頁面負載時間?目前大約需要3秒來加載頁面。有誰知道如何加快頁面加載時間?下拉列表值和視圖狀態添加到頁面大小,從而增加頁面加載時間

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

2011/9/16更新

做了一些改變。這些時間是基於我們提交表單時沒有驗證錯誤的時間。尚未實現緩存。首先,我想了解額外時間來自哪裏?有人知道嗎?

2.8s(onload事件3.55s) - 原代碼
2.5S(onload事件3.47s) - 未放置Page.IsPostback檢查各地下拉列表
2.22s(onload事件:2.79s) - 移除11000個收集點下拉,只是把一個客戶名稱加上一個用於缺少客戶端選項(頂部)

我不理解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

你在下拉列表中加載每個回發或只是第一次的數據? – slobodans

+0

只是在我們加載列表的行上打開調試...每次發生回發時都會出現(因此每次爲樣本樣本保存一個測試)。你推薦我用什麼代碼來包裝調用填充下拉列表的方法? (我將在明天再次上線) – MacGyver

+0

如果您的應用程序未在每個回發的下拉列表中添加新項目,則可以加載列表數據第一次,數據將保存在回發之間的視圖狀態中。所以你不需要在每次回傳時加載它。 – slobodans

回答

1

在猜測JavaScript(解壓縮/解析/執行)阻塞UI線程。

嘗試使用的dynaTrace AJAX版本中有點偷看深於螢火蟲去

+0

我又回到了這裏..如果可以的話,我想今晚解決這個問題。你願意幫助我使用這個工具嗎? – MacGyver

+0

當然,DynaTrace會告訴你什麼? –

+0

當我第一次運行程序時,我能夠獲得有關工作流程的報告,但隨後我清除了會話,現在每隔一段時間都沒有報告顯示。 – MacGyver

0

如果從巫婆數據加載下拉項目回發之間不會改變。 只有在首次加載頁面時,才能將數據加載到dropdowno中。

事情是這樣的:

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

下拉這些內容後,將被保存在ViewState中,回發之間。 這將減少回發後需要顯示頁面的時間。

也考慮某種緩存數據。 我不知道在下拉列表中加載的數據量有多大。 可能會被緩存在應用程序級別?

相關問題