数据排序应该在客户端还是服务器上完成

Should data sorting be done on the client or on the server?

本文关键字:服务器 客户端 排序 数据      更新时间:2023-09-26

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

GWT

不是这里的问题,你可以用Ajax调用替换GWT,或者你可以把它转置到一个真正的应用程序而不是一个Web应用程序。

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

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

  • 如果您需要分页,并且不想将整个数据下载到客户端,则必须在服务器上执行排序(否则客户端只能对当前拥有的行进行排序,如果按其他列重新排序,将导致错误的结果(
  • 在服务器上排序更快(如:您可以每秒排序更多行(,但如果您必须一次为 10000 个客户端提供服务,这可能很容易反转。
  • 在客户端上排序时,无需再次下载数据即可重新排序。

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

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

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

这取决于... :)

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

从架构上讲,要回答这个问题,您需要确定系统中所需的属性,并评估各种设计备选方案之间的权衡。 如果不了解有关您的系统的更多信息,则很难提供超出此范围的建议。

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

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