【问题标题】:Best Practices for displaying large lists显示大型列表的最佳实践
【发布时间】:2011-06-09 16:43:58
【问题描述】:

是否有将大量订单返回给用户的最佳做法?

让我试着概述一下我们试图解决的问题。我们有一个客户列表,每个客户都有 1-5,000 多个订单。我们直接从数据库中提取这些订单并将它们呈现给用户是一个分页网格。我们的视图是一个非常简单的“从订单中选择列”,当我们刚开始时它工作得很好,但随着我们的成长,它会导致性能/争用问题。似乎有一百万种方法可以给这只猫剥皮(仅返回一页数据,仅返回最近 6 个月的数据等),但就像我之前所说的,只是想知道是否有任何资源可以提供多一点手牵手如何解决这个问题。

我们使用 SQL Server 作为我们的事务数据库,并选择 XML 格式的数据。然后,我们混合使用 XSLT 和 Javascript 来创建我们的网格。我们没有嫁给演示解决方案,而是嫁给了数据库解决方案。

【问题讨论】:

  • 这可能值得在UX stackexchange 讨论。
  • @pointy 啊谢谢你的提示。没有注意到有一个 UX stackexchange 网站。

标签: javascript sql xslt


【解决方案1】:

我的经验。

  1. 始终在 UI 中为用户设置合理的默认值。您不希望他们点击“检索”并获取所有内容。
  2. 设置可以返回的记录数限制。
  3. 仅从数据库返回您要显示的记录。
  4. 如果前向/后向一致性很重要,请将查询的整个结果集存储在临时表中,并仅返回您需要显示的页面。向上/向下翻页时,从临时表中检索下一组。
  5. 确保您的索引涵盖了您的查询。
  6. 为不同的目的使用不同的查询。想想“未结订单”与“已结订单”。作为不同的查询而不是一个通用查询,这些可能会更好。
  7. 在存储过程中设置参数默认值。保护您的查询免受未设置合理限制的 UI 的影响。

我希望我们做了所有这些事情。

【讨论】:

    【解决方案2】:

    我建议进行一些分析以找出实际的瓶颈。也许您可以访问 Visual Studio Profiler? http://msdn.microsoft.com/en-us/magazine/cc337887.aspx 那里有很多优秀的分析器。

    否则,我的第一站将是分页以从数据库中带回更少的记录,这在连接和内存占用方面更容易。看看这个(我假设你在 SQL Server >= 2005 上) http://www.15seconds.com/issue/070628.htm

    【讨论】:

      【解决方案3】:

      我不确定您要解决的 UI 问题到底是什么。

      如果客户无法使用只有一个大的无定形 blob 的表格,那么让他按以下字段排序:订单日期、订单号、您的 SKU 号、他的 SKU数字也许,我猜其他人也是。他可能会发现进行多列稳定排序也很方便。

      如果是表格标题向上滚动并在他向下滚动订单时消失,那就更难了。阅读 the SO discussion,看看那里的方法是否提供了您可以使用的解决方案。

      还有一个 JQuery 机制可以将标题保持在视口内。

      HTH

      编辑:另外我会第二次 @Iain 的回答:做一些分析。
      另一个编辑: @Scott Bruns 的回答提醒我,当我们开始设计 UI,迄今为止最大的问题是限制用户必须查看的记录数量。所以,是的,我同意 Scott 的观点,你应该让用户从一开始就只看到有限数量的记录;也就是说,在他看到一张桌子之前,他已经告诉了你很多他想看的东西。

      【讨论】:

      • 抱歉,我在最初的问题中并不清楚 UI。网格本身是可排序的、可过滤的,并且可以分页。前 25 个被返回,您可以翻页到 26-50、51-75 等。
      【解决方案4】:

      愚蠢的问题,但是您是否询问过您应用程序的用户最初希望看到哪些记录?

      【讨论】:

      • 我们有小规模的。我们有外部用户和内部用户。我们调查了内部用户(小得多的用户组)并创建了专门的视图(最近的订单)。我们也向外部用户征求意见,但没有得到明确的回应。我们可能应该重新审视另一个建议收集项目。
      猜你喜欢
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2015-03-16
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多