C# 如何提高具有大量数据的服务器绑定控件的网页的速度

C# 如何提高具有大量数据的服务器绑定控件的网页的速度,c#,javascript,jquery,asp.net,performance,C#,Javascript,Jquery,Asp.net,Performance,我正在处理一个有几个服务器端下拉列表的页面,其中一个有500个条目。根据所选内容,我在回发期间显示/隐藏其他页面元素(我仅在初始加载时绑定数据)。客户经常打开此页面,我不希望他们每次打开时都将500个项目拖下来。目前,页面渲染大约需要2到5秒。我已经开始迁移到页面的完全javascript/jquery版本,但我不喜欢这个新版本,我想听听你的意见 有没有一种方法可以让这个页面更快,并限制每次下拉所有500个项目 注意:有些用户希望直接输入牙科程序代码。其他人需要进行查找。我已经有一段时间没有使用

我正在处理一个有几个服务器端下拉列表的页面,其中一个有500个条目。根据所选内容,我在回发期间显示/隐藏其他页面元素(我仅在初始加载时绑定数据)。客户经常打开此页面,我不希望他们每次打开时都将500个项目拖下来。目前,页面渲染大约需要2到5秒。我已经开始迁移到页面的完全javascript/jquery版本,但我不喜欢这个新版本,我想听听你的意见

有没有一种方法可以让这个页面更快,并限制每次下拉所有500个项目


注意:有些用户希望直接输入牙科程序代码。其他人需要进行查找。

我已经有一段时间没有使用asp.net了,但请记住Ajax控件工具包中的一些内容,它类似于一组筛选下拉列表,可以对项目进行分组,这样您就不必获得完整的列表


例如,如果您得到一个所有汽车的列表,您可以将第一个下拉列表设置为Manufacturer,选中该列表后,将激活第二个下拉列表,其中列出了它们的车型范围。它限制了您必须一次加载的数据量。

加快速度的一种方法是取消回发。显示/隐藏页面元素是客户端操作,不需要回发。如果您已经在使用jQuery,则可以
.show()
.hide()
页面上的任何元素

这不一定会解决初始页面加载的性能问题,但会在与页面交互时提高整体用户体验的性能

对于初始加载,可能会将各种数据绑定元素分解为AJAX调用,这些调用在初始页面标记加载后发生在后台?我有点像是在黑暗中拍摄,对这一页不太了解,但值得一试。可能加载基本标记而不加载列表中的数据,然后在
$(document).ready()
上对服务器端处理程序进行AJAX调用,该处理程序返回第一个菜单的元素。然后,当选择每个菜单时,以相同的方式获取下一个菜单的元素

总的加载时间大致相同(甚至可能长出几分之一秒),但同时UI将完全呈现,您将使用用户查看页面并开始与页面交互的时间(宝贵的几秒钟)加载其余的页面


编辑:在回答您对上述问题的评论时,您是否可以使用来稍微改善用户体验?用户是否一定要从列表中选择代码,还是更容易开始键入代码并缩小到正确的代码?从数据输入的角度来看,避免使用鼠标通常是一个好主意。

下拉列表不是容纳500个项目的好容器,因为长列表看起来很难看,很难找到项目。您可以将其更改为具有分页功能(例如,每页显示20个项目)的类似表格的控件(从服务器视图、gridview或repeater),也可以在表格上方添加一些文本框,用户可以通过键入一些关键字快速定位项目。之后,将表格放入更新面板,以便在单击某个按钮时使页面部分更新。

您可以在页面上执行的任何不需要更改整个页面的操作都可以通过将其包含在更新面板中来实现AJAX-y。UpdatePanels和ScriptManager允许ASP.NET页面使用AJAX执行部分回发,这将大大减少必须访问的数据数量,从而加快除整页重新加载以外的任何速度

其他表演技巧:

  • 如果您使用ORM或通用查询来拉入记录,请尝试拉入显示结果所需的最小数据量。必须来自数据库并被分解到viewmodel中的数据越多,后端的速度就越慢
  • 避免嵌套多视图。“多视图”对于以“选项卡式”方式组织大量数据非常有用,但在幕后,多视图被渲染为一系列div,并使用CSS隐藏/显示它们。这意味着多视图的每个选项卡都必须在初始页面加载时呈现。当多个多视图作为其他多视图的视图嵌套时,问题就更加复杂了。您可以通过使用codebehind动态选择适当的控件并将其插入到页面中,或者通过使用其他代码检测该控件对应的视图是否为当前选择的视图,以及跳过否则可能发生的任何繁重的数据检索/处理来避免这种情况。您可以将这两种方法与一些AJAX组件结合使用

使用javascript或任何客户端脚本都不是解决方案,因为客户端浏览器可能已禁用javascript

我建议你进行这些优化

  • 如果您的表包含500条记录和 不经常进行插入/更新操作,然后创建未聚集的索引

  • 如果不经常更改,请缓存数据

  • 创建存储过程可以改进查询结果,因为它是预编译的查询,可以防止sql注入攻击


  • 我们使用的系统可以从下拉列表中选择用户名,然后在下面显示用户信息。大约有600个用户,利益相关者的要求之一是用户必须在下拉列表中可选择-利益相关者认为非技术用户更好地“理解”如何使用下拉列表

    我们加载下拉列表的性能非常好。我们做了以下工作:

  • 尽快加载页面,但不要加载下拉列表
  • 在页面加载时,显示加载指示器,然后立即获取下拉列表的数据
  • 我们得到检察官