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


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

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

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


2912
2018-05-23 13:53


起源

我喜欢用ajax做它并解析客户端上的json响应。 - Ryan M


答案:


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

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

11
2018-05-23 14:04



那么,我们可以回顾一下:如果不需要通过用户操作排序(仅限javascript),那么在服务器上进行排序更好(大部分时间,我听说过关于性能的论点)? - Jerome Cance
是的,如果用户无法重新排序,那么我通常会在服务器上预先排序。 - Chris Lercher


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

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

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


1
2018-05-23 14:06



好吧,排序,例如即使在最慢的客户端上,客户端上的100行也非常快。发送另一个请求的资源使用情况是 X 时间更高。 - Chris Lercher
同意,似乎最好分析/调查可能需要排序的行数和次数,然后决定应该在哪里进行排序。 - Anuroop


这取决于... :)

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

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


1
2018-05-24 17:33





我认为你应该在客户端上做,因为我认为,如果有10000个要求,那么你的服务将不需要至少10000次排序。


0
2018-05-23 14:05