应该在哪里进行数据排序?服务器或客户端?

时间:2012-05-23 13:53:15

标签: javascript ajax gwt sorting architecture

我从服务器获得了一些我在客户端使用GWT显示的数据。

GWT不是问题,您可以通过ajax调用替换GWT,也可以将其转换为真实应用程序而不是Web应用程序。

应该在哪里进行排序操作?在服务器上?或者在客户端上使用javascript,收到数据后再显示它们?

4 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

这取决于......:)

  1. 要分类的数据量是多少?多快? “尽可能快”好吧......你能接受的最慢的是什么?客户可以处理这个吗?服务器怎么样?这些元素还有哪些其他责任,这是否会产生冲突?
  2. 数据的排序有多可靠?例如,如果数据没有排序,有时会这样吗?
  3. 如何将责任分配给您的架构中的元素?就此而言,有哪些要素?你有数据库吗?业务层怎么样?世界可能比“客户端与服务器”更复杂
  4. 如何使用数据?是否需要进行多种排序?例如,A-> Z和Z-> A?
  5. 客户端和服务器之间传输数据的成本是否合理?还有其他方法可以让它合理吗?
  6. 从架构上讲,要回答这个问题,您需要决定系统中所需的属性,并评估各种设计方案之间的权衡。如果不了解您的系统,很难提供超出此建议的建议。

答案 3 :(得分:0)

请注意一条包含所有内容的陈述,即在服务器上进行排序总是比在客户端上进行排序更快。我遇到的情况是,我要返回几千条记录,这些记录按姓氏和名字的串联排序。这些字段均未索引,我对此无能为力。众所周知,对串接的字符串进行排序并不是数据库固有的功能。它看起来是数字和/或索引字段。在这种情况下,在客户端上进行排序最终变得更快。如果我可以控制数据库,则可以在Oracle的这两个字段中放置一个函数索引。

这个故事的寓意是假设一切都没有,并配置您的应用程序,以找出最适合您的情况的