原创

浅谈web分页


  • web端分页大致可以分为2种:前端分页和后端分页。但无论哪种,都需要:当前页码(page) 和 每页显示数量(size)2个参数。

  • 前端分页

也就是Ajax局部刷新页面,一次性查询所有数据,后台不做处理。这样做的好处是后台省事,什么条件都不用加,查询到数据直接返回给前端就ok了。前端可用一个分页插件或者自己手写一个分页插件(日常造轮子?),展示数据,完事。但是这种分页方式的缺点是显而易见的。首先,数据量一大,(例如几十万)数据库压力比较大,消耗资源多,网络传输慢,特别是用户网速不佳的情况下,很容易请求超时。再者,前端拿到数据,需要用插件进行二次分页,然后在进行数据渲染,数据量一大,容易导致长时间白屏的情况,用户体验很差。还有一个致命的缺点:前端分页的即时性没有保证。在用户第一次请求,后台做出响应拿到数据后,如果用户换页,这时没有请求后台,只是前端的数据翻页,如果在此之前数据有更新,前端分页是不能得到最新的数据的。不过前端分页也不是一无所用,可以结合后台分页一起用。例如,新浪微博评论的前十条(第一页)是前端ajax分页,在a标签的加上src属性利于爬虫抓取。

  • 后端分页

可以分为大致两种:服务器分页和数据库分页。

  • 服务器分页

也叫逻辑分页。查询所有数据,返回结果集(ResultSet),利用游标的滚动分页,使用list截取保存分页数据。每次请求根据page和size返回数据。可以看到这种方式是通过服务端逻辑处理进行分页。控制层可以ajax返回数据,也可以页面返回数据,2者差别不大。这种分页方法渐渐的被淘汰了。每次读取游标的值,数据量一大,服务端逻辑处理就很复杂。保存在内存中的数据也就越多。给服务器带来很大的压力。再者,此类方式同样也存在数据即时性的问题。

  • 数据库分页

也叫物理分页。这是最常用也是最主流的分页方式。通过分页语句,在数据库中拼装分页数据,根据page和size查询数据,返回其他分页信息(当前页currpage,总页数totalpages,是否首页,末页等等)给服务器。不同的数据库的分页语句各有差异。**mysql为limit(m,n)(也有其他分页语句)。oracle需要嵌套子查询使用伪列rownum,rowid实现。而sqlserver需要使用top关键字。**早期查询到的其他分页信息我们需要自己创建一个javabean对象保存,但是随着各大orm框架的兴起,它们把这些常用的分页信息封装好了。比较典型的有:Mybatis的 Mybatis-PaginatorMybatis-PageHelper SpringDataJPA的PagingAndSortingRepository接口和Page接口。数据库分页的方式解决了数据即时性的问题,并且有较高的效率,对服务器和客户端压力都比较小,是当前web分页的最优选择。

分页
javaweb
  • 作者:管理员(联系作者)
  • 发表时间:2020-03-19 10:18
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 微信公众号

    评论

    留言