Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分页/可排序列的方式(客户端或服务器端)?_Java_Web Applications_Pagination - Fatal编程技术网

Java 分页/可排序列的方式(客户端或服务器端)?

Java 分页/可排序列的方式(客户端或服务器端)?,java,web-applications,pagination,Java,Web Applications,Pagination,我在一个employee表中有3000条记录,我通过一个查询从数据库中获取了这些记录。我每页可以显示20条记录。因此,将有150页,每页显示20条记录。关于分页和可排序列方法,我有两个问题: 1) 如果我实现了一个没有可排序列的简单分页,我应该将所有3000条记录发送到客户端,并使用javascript或jquery在客户端进行分页。所以,若用户单击第二个页面,调用将不会转到服务器端,而且会更快虽然我不确定在浏览器/客户端发送3000条或更多记录会有什么影响?那么,将所有记录一次性发送到客户端并

我在一个employee表中有3000条记录,我通过一个查询从数据库中获取了这些记录。我每页可以显示20条记录。因此,将有150页,每页显示20条记录。关于分页和可排序列方法,我有两个问题:

1) 如果我实现了一个没有可排序列的简单分页,我应该将所有3000条记录发送到客户端,并使用javascript或jquery在客户端进行分页。所以,若用户单击第二个页面,调用将不会转到服务器端,而且会更快虽然我不确定在浏览器/客户端发送3000条或更多记录会有什么影响?那么,将所有记录一次性发送到客户端并在那里进行排序,或者单击页面将调用发送到服务器端,然后只返回特定页面结果的最佳方法是什么?


2) 在这个场景中,我需要提供分页以及可排序列(6列)。所以在这里,用户可以单击任何列,如员工姓名或部门名称,然后名称应按升序或降序排列我想再次了解在时间响应/内存方面的最佳方法?

我假设您有一个bean类表示此表中的记录,实例从您现有的任何ORM加载

如果还没有,那么应该在应用程序中实现这些bean的缓存。这可以在本地完成,可以使用Guava,也可以远程调用,例如(后者对于多个应用服务器/负载平衡是必要的)。这些bean的缓存应该在唯一的id上设置键,最有可能是对应表的主键列的映射

进入分页:只需编写查询以仅返回所选记录的ID。包括
LIMIT
OFFSET
或您的DB语言等效于paginate。查询调用方还可以使用
WHERE
ORDER BY
等任意过滤/排序


回到Java层,遍历这些查询的结果ID,并通过调用缓存构建bean的
列表。如果缓存未命中,它将调用您的ORM单独查询并加载该bean。一旦创建了
列表
,就可以对其进行处理/序列化并发送到用户界面。

将数据发送到客户端几乎肯定会成为瓶颈(尤其是移动客户端),因此您应该始终尽可能少地发送数据。话虽如此,在服务器端进行分页几乎肯定会更好。这是一个更具可扩展性的解决方案。数据量很可能会增加,因此将来只在服务器上进行分页比较安全


此外,请记住,任何用户实际上都不太可能费心查看数百个结果页面,因此传输所有数据也可能是浪费。可能是您的相关阅读。

我知道这不会直接回答客户端与服务器端分页,但我建议使用DataTables.net来显示和分页数据。它提供了一个非常好的显示,允许排序和分页,内置搜索功能,等等。我第一次使用它是在我从事的第一个web项目中,作为一个完整的noobie,我能够让它工作。论坛还提供了非常好的信息/帮助,创建者将回答您的问题。 DataTables可以用于客户端和服务器端,并且可以支持数千行。
至于速度,我只有几百行,但使用客户端处理,从未注意到延迟。

使用服务器分页

当然,您可以发送一个包含3000个元素的JSON数组,并使用JavaScript在客户端上进行分页/排序。但是一个好的网络程序员应该知道如何在服务器上分页和排序记录。(他们真的应该知道一些方法)。因此,将其视为良好实践:)

如果你想要一个光滑的用户界面,考虑使用一个使用Ajax来获取数据的。通常,这些组件会传回以下参数(或其某些变体):

  • 开始记录索引
  • 要返回的记录数
  • 排序列
  • 排序方向
  • 要获取的列(有时)

由开发人员实现一个处理程序或接口,该处理程序或接口根据这些输入参数返回结果集。

发送3000条有意义数据记录的效果将大大降低客户端浏览器的速度。我会在服务器端分页。我不知道数据集有多大会影响浏览器性能。从您的答案看,3000条或更多记录将很难由浏览器处理。是吗?问题:看到“下一个”20个结果的概率/频率是多少?如果低,则对服务器端进行分页。如果适中,仍然服务器端,值得处罚。如果高,仍然是服务器端,因为瓶颈和客户端处理可能不值得:)您始终可以使用OFFSET和LIMIT来知道要获取哪个页面:)PS:除非您发送回的数据非常小,即仅员工姓名、id、,有些细节我想3000张唱片不会太多,所以可能值得发送它们-但请确保这不是过早的优化w.r.t.我的上述评论谢谢回复。从所有答案来看,服务器端分页是更好的选择。但是,为了完全弄清楚这一点,我们想知道如果在客户端而不是服务器端进行分页和排序,会产生什么影响。我的意思是为什么这不是一个好的选择。是因为在网络上传输如此庞大的数据需要更长的时间吗?我不知道庞大的数据集对浏览器性能有多大的影响。从您的答案看,3000条或更多记录将很难由浏览器处理。是吗?也考虑我基本上