Sorting 分页和排序问题

Sorting 分页和排序问题,sorting,web-applications,pagination,html-table,Sorting,Web Applications,Pagination,Html Table,我正在研究面向数据库的web应用程序中的情况,在这种情况下,应该依赖客户端对表的排序,而不是服务器端的排序。困扰我的一个特殊情况是分页 当尝试对一个大表(比如10000行)进行分页并按特定列对其进行排序时,最好的方法是什么 据我所知,与此相关的一些问题包括: 我不能一次就把整张桌子还给客户 我不能用javascript对多达10000条记录进行排序 对表进行排序将涉及对所有页面中的行进行排序,而不仅仅是对当前页面 那么,您还有什么问题要添加到此列表中吗 什么样的方法可以很好地混合客户端和服务

我正在研究面向数据库的web应用程序中的情况,在这种情况下,应该依赖客户端对表的排序,而不是服务器端的排序。困扰我的一个特殊情况是分页

当尝试对一个大表(比如10000行)进行分页并按特定列对其进行排序时,最好的方法是什么

据我所知,与此相关的一些问题包括:

  • 我不能一次就把整张桌子还给客户
  • 我不能用javascript对多达10000条记录进行排序
  • 对表进行排序将涉及对所有页面中的行进行排序,而不仅仅是对当前页面
那么,您还有什么问题要添加到此列表中吗

什么样的方法可以很好地混合客户端和服务器端交互,从而最小化服务器负载


补充:

好的,在数据库上排序并返回reqd页、上一页和下一页似乎是最好的选择

现在考虑一下:

用户位于按序列号排序的表格第3页(共10页)。现在,用户单击名为“username”的标题,希望按用户名对表进行排序

问题:最终结果应该是“第1页,共10页,按用户名排序”还是“第3页,共10页,按用户名排序”


我知道这是一个非常主观的问题,但你会推荐什么?为什么?

数据库在数据排序和选择方面是真正的野兽。因此,最好的办法就是让客户机对服务器说,“我想要X页,其中Y行按Z排序。”然后数据库完成它的工作,客户机显示结果。为了提高性能,您可以让客户端缓存结果,此外,在获取当前页面后,您可以让代码请求下一页和上一页,以便在请求时立即显示这些页面。

最好的方法是在数据库级别进行排序和分页,只返回仅在屏幕上显示的原始数据的子集。在这个场景中没有javascript

如果由于某些原因无法在数据库级别进行排序和分页,则应使用服务器端脚本进行排序和分页。在这个场景中也没有javascript


最糟糕的方法是使用javascript进行排序和分页,当然,出于明显的原因,根本不推荐使用javascript。

让db对屏幕上特定页面的内容进行排序。它几乎总是会更快,被缓存,并减轻浏览器上的此类负载


如果愿意,让客户端允许通过javascript进行进一步的子排序,如果数据足够详细,可以从中受益。您可能希望存储所选择的子排序功能,以便在页面之间记住它们。

客户端最好保持简单:Javascript排序/分页仅适用于非常小的结果集-小到用户不会注意到性能影响

服务器端是优化服务器负载的地方:

负载可能以频繁请求更多页面、每页有大量行/列以及频繁请求重设的形式出现。(我们甚至还没有讨论过过滤)

因此,根据您的用户和实际使用情况,您可能需要某种形式的缓存。请注意,这些是在您了解用户正在做什么之后的一段时间内的建议:

    >P>对于频繁的页面请求,考虑有一些Ajax请求预加载接下来的几页(和以前的)页面,然后根据用户请求将行(通过JavaScript)交换到表中。

    > p>对于大的页面大小,考虑将行保持在“最近使用的”应用程序(内存)缓存中,这样数据库就不需要一遍又一遍地吐出同样大的数据块。

  • 对于频繁的重新调用,一个好方法是在SQL中保留一个缓存表,其中只包含结果

并且总是,总是,总是适当地索引数据库


其他答复:

我非常主观的反应是:用户(我)想要从任意页面进行排序。让他们(我)来吧。没有什么比呆在你想去的地方,让一个应用程序把你推回到列表的开头更让人恼火的了


另一个需要考虑的问题是多层次的排序:您是否希望实现序列号排序,然后是用户名排序?考虑一下微软Excel所做的事情,或者用户熟悉的任何其他应用程序。您的用户可能会对他们习惯的内容感到满意,包括返回到第1页。

好问题。你可能知道我最近处理过这个问题。