zoukankan      html  css  js  c++  java
  • 说说分页

    (这个是老掉牙的问题;不许笑~) 

    列举一下各种分页风格。 

    风格1. Page Number with/out PageSize 

    这应该最常见的分页方式。 

    ASP时代record set对象对此有直接支持;但rs实际上是从数据库中获取了所有数据,在应用中做了分页;性能极其低下(ASP.Net早期的 
    DataGrid似乎也有此传统。)。 

    好处:简单/易懂;往往有总页数支持,用户体验较好。 
    坏处:默认可能会有性能问题可以解决,但不适合用于处理高频更新的数据。看完第一页后翻第二页时,可能又有了一页新内容,第二页显示出来还是刚刚第一页 
    的内容。 

    风格2: Start with PageSize 

    是风格1的修改版,两者其实可以互换;但界面不一样,风格2往往不会有总页数提示;而是采用 Prev / Next的风格。 

    好处跟坏处与1类似;常用于显示总条目数量无法轻易统计的场景。 

    Start > 0时显示Prev链接;Next的显示比较取巧: 
    永远拿PageSize + 1的数据,能够获得PageSize + 1时就Trim掉最后一条数据,并显示Next。 

    风格3: Cursor with PageSize 

    相对于风格1/2,这可视为是对特定应用: 
    数据有按顺序排列的ID 

    的特殊处理。 

    比方说,列举最新注册用户,风格1/2对应的sql类似: 
    MySQL: select * from users order by id desc limit 10, 20 
    SqlServer: select * from (select * ,ROW_NUMBER() over (order by id 
    desc) as rowNum from users ) as mytable where rowNum between 11 and 20 

    但风格三对应的SQL会是: 
    select top 10 * from users order by id desc where id > XXX 

    性能较1/2会有本质提高。 

    缺点对数据格式有要求,幸好在SNS类应用中,大多数情况都符合此要求。 

    Prev需要由上一页传递Cursor(或者修改sql的where条件为id < XXX),Next依旧采用风格2中“多拿一个”的方法处理。 

    风格4: Cursor with PageSize / Count 

    属于风格1 + 3的混合体。 

    基于风格3,但是用一个较大的PageSize,比方说100;然后再对这100条数据里面使用风格1做分页。 

    在特定情况(其实也往往是最常见的情况)下风格3可以获得极高的性能,所以增加风格1的提高用户体验。 

    界面上不再显示Prev / Next,而是显示上/下N页,类似Google的搜索结果页。 

    风格4看上去最怪异,但却可能是最应该使用的。 

    欢迎一起来讨论老掉牙的分页问题~

  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/wuvist/p/1686267.html
Copyright © 2011-2022 走看看