【问题标题】:Should data sorting be done on the client or on the server?数据排序应该在客户端还是服务器上进行?
【发布时间】:2012-05-30 02:08:21
【问题描述】:

我从服务器获取数据并想在客户端使用 GWT 显示它。

GWT 不是这里的问题,您可以用 Ajax 调用替换 GWT,或者您可以将其转换为实际应用程序而不是 Web 应用程序。

在收到数据后显示数据之前,是在服务器端还是在客户端使用 JavaScript 进行排序?

【问题讨论】:

  • 我喜欢用ajax来做,在客户端解析json响应。

标签: javascript ajax gwt sorting architecture


【解决方案1】:

每种方法都有其优点和缺点:

  • 如果需要分页,又不想将全部数据下载到客户端,那么就必须在服务端进行排序(否则客户端只能对当前拥有的行进行排序,会导致错误的结果,如果您按不同的列重新排序)
  • 在服务器上排序更快(例如:您可以每秒排序更多行),但如果您必须同时为 10000 个客户端提供服务,这可能很容易反转。
  • 在客户端排序时,无需重新下载数据即可重新排序。

【讨论】:

  • 所以,我们可以回顾一下:如果不需要通过用户操作(仅限 JavaScript)进行排序,最好(大多数时候,我听说过你关于性能的论点)在服务器上排序?
  • 是的,如果用户不能重新排序,那么我通常会在服务器上进行预排序。
【解决方案2】:

理想情况下,排序应该在服务器上完成,因为:-

  1. 最好假设您的客户端资源不足。例如,有些人会从桌面启动 GWT 应用程序,但另一些人可能会从 CPU/RAM 较少的 iPad/手机启动 GWT 应用程序

  2. 有一些标准方法可以在服务器端进行排序,例如,使用 SQL ORDER BY 子句,但您可能必须实现自己的例程/方法才能在客户端进行排序。

【讨论】:

  • 好吧,排序例如即使在最慢的客户端上,客户端上的 100 行也非常快。发送另一个请求的资源使用率高出 x 倍。
  • 同意,似乎最好分析/调查可能需要排序的行数和次数,然后决定应该在哪里进行排序。
  • 第一点是非常好的一点,因为我们确切地知道服务器的能力和规格以及它的排序能力,而我们通常不知道客户端的规格和它的能力表现.当客户端可能没有多核和异步功能(可能相当于冻结的 UI)时,这一点尤其重要。
【解决方案3】:

这取决于... :)

  1. 要排序多少数据?多快? “尽可能快”好的……你能接受的最慢的速度是多少?客户可以处理吗?服务器呢?这些元素还有哪些其他职责?这会产生冲突吗?
  2. 数据排序的可靠性如何?例如,如果数据有时没有排序,这样可以吗?
  3. 如何为架构中的元素分配职责?就此而言,元素是什么?你有数据库吗?业务层呢?世界可能比“客户端与服务器”更复杂
  4. 如何使用数据?是否需要执行多种排序?例如,A->Z 和 Z->A?
  5. 在客户端和服务器之间传输数据的成本是否合理?是否有其他方法使其合理?

从架构上讲,要回答这个问题,您需要确定系统中所需的属性,并评估各种设计备选方案之间的权衡取舍。在不了解您的系统的情况下,很难提供除此之外的建议。

【讨论】:

    【解决方案4】:

    人们应该注意一个包罗万象的声明,即在服务器上排序总是比在客户端上更快。我有一个案例,我返回了几千条按姓氏和名字串联排序的记录。这些字段都没有被索引,我无法控制这一点。众所周知,对连接的字符串进行排序并不是数据库本质上擅长的事情。它看起来是数字和/或索引字段。在这种情况下,在客户端上进行排序最终会更快。如果我能控制数据库,我会在 Oracle 中在这两个字段上放置一个函数索引。

    这个故事的寓意是什么都不做,并分析您的应用程序以找出最适合您的方案的方法。

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2011-12-06
      • 2014-05-10
      • 2012-09-22
      • 2022-01-16
      • 2015-06-23
      相关资源
      最近更新 更多