我正在尝试修复特定的实验室Web应用程序(用ASP.NET编写)。有一个页面用于快速数据输入,最终用户使用条形码扫描仪输入数据。每次他们扫描样品(或试管)上的条形码时,它会根据条形码将实际数据输入到文本字段中,并告诉浏览器选择标签到下一个字段。他们正在扫描两个条形码,两个文本字段接收数据输入。许多(实际上所有)其他字段可能已经默认为特定的样本托盘,因为该数据不需要改变。此数据输入完全与速度有关。我修复了表单,以便tabbing(onblur事件)使用对WCF服务的AJAX调用。那很快。问题是他们提交表格以保存测试(基于样本标本)。表单使用整页回发。我的目标是最终重新设计后端架构,以便在保存数据时消除整页回发,并为此使用WCF AJAX调用。但就目前而言,我只是想弄清楚为什么页面这么慢。事实上,回发导致了缓慢。有一些SQL查询减慢了速度,我认为缓慢是由于其中包含11,000个收集站点的下拉列表。每次加载页面时都会加载列表。有没有办法可以在此下拉列表中使用那么多数据加快页面加载时间?我是否需要将该下拉列表更改为具有前5-10个匹配项的某种类型的自动完成控件(类似于Google搜索的工作方式),或者是否有办法通过保留下拉列表来提高性能,但减少页面加载时间?目前加载页面大约需要3秒钟。有谁知道如何加快页面加载时间?
=================
做了一些改变。这些时间基于我们提交表单时没有验证错误。还没有实现缓存。首先,我想了解额外时间的来源?有人知道吗?
2.8s(onload 3.55s) - 原始代码
2.5s(onload 3.47s) - 在下拉列表中放置Not Page.IsPostback检查
2.22s(onload:2.79s) - 在下拉列表中移除11,000多个收集站点,只需在其中放置一个客户端名称,另外一个用于缺少客户端选项(在顶部)
我不了解Firebug Net标签如何添加这些时间。它们不会累计总时间。那为什么会这样?额外延迟来自何处?
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 :(得分:1)
猜测javascript(解压缩/解析/执行)阻止了UI线程。
尝试使用dynaTrace AJAX版本比Firebug更深入地查看
答案 1 :(得分:0)
如果来自女巫的数据加载下拉项目在回发之间没有变化。 只有在首次加载页面时,才能将数据加载到dropdowno中。
这样的事情:
if(!IsPostback)
{
// Load dropdown data
}
之后,下拉列表的内容将保存在ViewState中,在回发之间。 这将减少您在回发后显示页面所需的时间。
还要考虑某种数据缓存。 我不知道您在下拉列表中加载的数据量有多大。 可以在应用程序级别缓存吗?