0

我正在尝试修复特定的实验室 Web 应用程序(用 ASP.NET 编写)。有一个用于快速数据输入的页面,最终用户使用条形码扫描仪输入数据。每次他们扫描样品(或试管)上的条形码时,它都会根据该条形码将实际数据输入到文本字段中,并告诉浏览器使用 Tab 键转到下一个字段。他们正在扫描两个条形码,以及两个接收数据输入的文本字段。许多(实际上是所有)其他字段可能已经默认用于特定托盘的样品,因为不需要更改该数据。这个数据输入是关于速度的。我已经修复了表单,以便制表符(onblur 事件)使用对 WCF 服务的 AJAX 调用。这非常快。问题是当他们提交表格以保存测试时(基于样本样本)。该表单使用整页回发。我的目标是最终重新设计后端架构,以在保存数据时消除整页回发,并为此使用 WCF AJAX 调用。但是现在,我只是想弄清楚为什么页面这么慢。实际上是回发导致缓慢。有一些 SQL 查询减慢了速度,我认为速度缓慢是由于其中包含 11,000 个收集站点的下拉列表。每次页面加载时都会加载列表。有没有办法可以在这个下拉列表中使用这么多数据来加快页面加载时间?我是否需要将该下拉列表更改为具有前 5-10 个匹配项的某种类型的自动完成控件(类似于 Google 搜索的工作方式),或者有没有办法通过将下拉列表保留在那里来提高性能,但减少页面负载时间?它' 目前加载页面大约需要 3 秒。有谁知道如何加快页面加载时间?

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

2011 年 9 月 16 日更新

做了一些改动。这些时间基于我们在没有验证错误的情况下提交表单的时间。还没有实现缓存。首先我想了解额外的时间是从哪里来的??有人知道吗?

2.8s (onload 3.55s) - original code
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
...
4

2 回答 2

1

猜测javascript(解压缩/解析/执行)阻塞了UI线程。

尝试使用 dynaTrace AJAX 版本比 Firebug 更深入地窥探

于 2011-09-27T09:36:21.203 回答
0

如果您加载下拉项目的女巫数据在回发之间没有变化。只有在第一次加载页面时,您才能将数据加载到 dropdowno 中。

像这样的东西:

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

之后,下拉列表的内容将在回发之间保存在 ViewState 中。这将减少您在回发后显示页面所需的时间。

还要考虑某种数据缓存。我不知道您在下拉列表中加载的数据量有多大。可能可以在应用程序级别缓存吗?

于 2011-09-16T13:17:35.067 回答