【问题标题】:How to load large amounts of data in a ListBox? ASP.NET MVC application如何在 ListBox 中加载大量数据? ASP.NET MVC 应用程序
【发布时间】:2019-04-17 00:48:30
【问题描述】:

我正在使用 ASP.NET MVC 应用程序。

要求用户能够从包含超过 30,000 个条目的 ListBox 中选择一个项目。

是否有使用 Ajax 调用填充此 ListBox 内容的动态方法 - 效果会很好?

在服务器上填充 ListBox 控件,然后让用户在页面呈现 30,000 个条目时等待会更好吗?

如果我采用某种 jQuery 解决方案,性能会更好吗?

关于如何最有效地处理这种情况的任何建议(无需让客户更改要求:-))?

【问题讨论】:

标签: jquery ajax asp.net-mvc listbox


【解决方案1】:

这听起来是个坏主意 - 30,000 个条目?如果您必须从这个大小的列表中进行选择,您会有什么感受?

这种类型的用例最好使用自动完成。

【讨论】:

  • plug: bassistance.de/jquery-plugins/jquery-plugin-autocomplete 是我用于大型业务系统自动完成大量条目的工具。
  • 使用自动完成功能,我仍然需要最初将所有 30k+ 条目发送给客户端?我猜这仍然会导致明显的延迟。
  • 您不会一次发送所有 30k 个条目。当用户开始输入时您开始发送(因此您可以使用输入字符串查询结果并可能将其缩小很多)。祝你好运!
  • 不,自动完成将输入文本发送到服务器,服务器将对您的数据运行查询并仅返回匹配结果,可能限制为 10 个。
  • 如果它是一个列表框(而不是一个组合框),您首先需要使用至少一些条目来填充它。
【解决方案2】:

我不会尝试以someone else already did 来回答这个问题:

这种类型的控制也很常见 通常在企业应用程序中: 下拉控件和列表 包含数千个条目。


(来源:mac.com

错误使用它的程序员 通常会暗示它可能是 当他们发现不合适时 需要非常长的时间 加载表单。

以下 消息,发布在 Visual Basic 中 12月11日程序员论坛, 1996年,典型:

我想填写一个 包含 2000 个项目的列表框...这个 需要非常长的时间......超过20 分钟。有什么想法吗?

还有一个帖子 1996 年 12 月 16 日,有点 不太典型:

我正在寻找一份清单 可以...容纳大的盒子控件 条目数(20,000+)

这种笨拙的控制的借口 往往是错误的解释 万能的武装号召,“我们必须 确保数据完整性。” 程序员希望确保 用户指定一个有效条目;在他们的 看来,最好的方法是 强制用户从列表中进行选择。 如果你有 20 个就好了 60,甚至可能有 100 个项目 列表。除了这个数字,事实 用户只能滚动一个 一次有少量物品会导致 控制变得笨拙。

想象一下,如果您没有文件夹和 硬盘上的目录。 每当您需要指定文件时, 您看到了一个下拉菜单 包含每个名称的控件 文件在您的硬盘驱动器上,并要求 选择您要打开的那个。很少 人们,包括程序员,会 考虑这样的方法 低于完全不可接受。

所有数据都可以组织成一些 有意义的方式,这将允许 用户可以更快地访问 他或她的具体信息 有兴趣。文件整理好 到文件夹或目录中 例子。员工经常 按部门、职务分类、 或工资等级。设计 接口来利用适当的 组织将允许用户 更快速地找到所需的 信息,同时, “确保数据完整性。”

【讨论】:

    【解决方案3】:

    这个问题的唯一答案是:不要。您是否尝试过从包含 30,000 个项目的 ListBox 中选择某些内容?客户有没有这样做过?

    更新:我认为最有效的解决方案是将指向此页面的链接通过电子邮件发送给您的客户,让他了解这个问题引发的普遍恐惧。

    【讨论】:

    • 哈哈!就像我说的。我同意你们的看法。只是想确保我没有忽略某些东西。
    【解决方案4】:

    听起来简直是疯了。

    如果用户必须滚动浏览 30000 个条目,他会有什么感觉?此外,对于眼睛不完美且运动技能有些欠发达的用户来精确操作鼠标来说,体验会很痛苦。

    不要这样做。使用其他方法:

    • 内容分页,可选择使用复选框来选择项目
    • 根据各种标准对内容进行排序
    • 对选项进行分类,以便用户首先选择正确的类别,然后从简短的选项列表中进行选择
    • 如果精确选择并不重要,请尝试使用 Ajax 技术显示一个列表,其中包含可供选择的建议
    • 为用户添加一个过滤器字段来定义模式,然后让其余的都放弃

    您的另一个想法是使用支持多列和图标的增强列表。查看 Windows 资源管理器。从带有大图标的几列中进行选择比从一长串小文本字符串中选择要容易得多。

    您的方法的另一个缺点:在选择列表中同时拥有这么多记录也会将页面大小扩大到数兆字节。如果您启用了视图状态,它会非常缓慢且消耗资源。

    【讨论】:

    • 我同意上面所有的 cmets。我们正在转换一个现有的应用程序,它确实有一个包含 30k 多个项目的 ListBox。尽管我们的建议相反,客户仍希望保持这种行为。我想确保我没有忽略某些东西。
    【解决方案5】:

    如果您预先加载所有内容,性能只会像下载标记并最初呈现它所需的一样慢。

    如果您通过 AJAX 调用(jQuery 或其他方式)加载所有内容,它将不得不发出请求、下载结果、解析结果并将它们呈现到页面......这甚至更慢(尤其是对于某些东西)那个尺寸)。

    我会问为什么 ListBox 需要这么多条目。没有用户能够有效地使用该控件。也许减少列表的大小并实现分页以使事情更有用?

    【讨论】:

      【解决方案6】:

      从性能的角度来看,30,000 个项目实际上并没有那么多。试一试,在测试中我已经能够放置多达 100,000 个项目。

      不过,从用户的角度来看,从可用性的角度来看,绝对最大值可能是 1,000 个项目。我通常停在100个项目上。我建议在您的列表框上方添加一个文本框。允许用户搜索术语。您可以使用 jquery 填充框,或使用更新面板。如果您将结果限制为 100 个项目,这将非常快。

      【讨论】:

        【解决方案7】:

        只需使用一些好的老式验证;不需要一个包含宇宙中所有已知选项的疯狂列表框。

        【讨论】:

          【解决方案8】:

          我通过向用户发送查询返回 200 多条记录作为结果的信息解决了这个问题,然后我只加载了其中的一半;这样,我建议用户添加另一个过滤器,以减少结果记录的数量。老实说,我希望有更好的方法来加载数百个资源,因为用户向下滚动列表框但还没有成功。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-27
            • 1970-01-01
            • 1970-01-01
            • 2020-11-07
            • 1970-01-01
            • 1970-01-01
            • 2013-12-18
            相关资源
            最近更新 更多