分页和排序的问题

jrh*_*ath 9 sorting pagination web-applications html-table

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

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

我理解与此相关的一些问题是:

  • 我无法一次性将整个表格返回给客户端
  • 我无法用javascript对10000条记录进行排序
  • 对表进行排序将涉及对所有页面中的行进行排序,而不仅仅是当前页面.

那么你还有什么问题要添加到这个列表中吗?

什么方法可以实现客户端和服务器端交互的良好组合,从而最大限度地减少服务器负载?


加成:

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

现在考虑一下:

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

Quesion:最终结果应该是"用户名"排序的"页面(10个中的10个)"还是应该是"用户名"排序的"页面(10个中的10个)"?

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

Jef*_*ang 5

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

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

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

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

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

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

  • 对于频繁求助,一个好的方法是在 SQL 中保留一个只包含结果的缓存表。

并且始终,始终,始终适当地索引数据库。


补充回复:

我非常主观的回答是:用户(我)想要从任意页面进行排序。让他们(我)。没有什么比待在您想去的地方并且让应用程序让您回到列表的开头更烦人的了。

另一个考虑是多级排序:你想实现按序号排序,然后按用户名排序吗?考虑 Microsoft Excel 的功能,或您的用户熟悉的任何其他应用程序。您的用户可能会对他们习惯的东西感到满意 - 包括被扔回第 1 页。