列表分页,怎么保证第二页不出现第一页的某些条目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mscststs
V2EX    编程

列表分页,怎么保证第二页不出现第一页的某些条目

  •  
  •   mscststs 2019-04-06 12:41:30 +08:00 4971 次点击
    这是一个创建于 2454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近忽然又想到了这个问题。

    很多网站都会用 列表+分页 的方式来展现信息,手机端也有下拉加载(分页的另一种表现形态),但是分页的同时又会出现一个问题:第一页的某些条目,在第二页又出现了。 原因是点下一页之前有几条数据被新的数据顶到了第二页。

    想问问看有没有什么好的方法可以解决这种问题,不论是前端还是后端。

    13 条回复    2019-06-21 08:12:51 +08:00
    yangg
        1
    yangg  
       2019-04-06 12:43:41 +08:00 via iPhone
    拿最后一条的 ID 或者时间去不就好了
    PHPJit
        2
    PHPJit  
       2019-04-06 12:43:56 +08:00 via Android
    前端过滤去重
    mscststs
        3
    mscststs  
    OP
       2019-04-06 12:51:08 +08:00
    @yangg 用 ID 确实可以,但是有些列表是这样的:比如论坛、贴吧贴子,是根据最后回复时间来排序的


    @PHPJit 前端过滤的话会不会出现每个页面的 PageSize 不固定?我感觉前端过滤的话可能也有一定的问题
    woodnaonly
        4
    woodnaonly  
       2019-04-06 13:12:03 +08:00 via Android
    @PHPJit 后端太菜丢给前端不可取
    iConsLii
        5
    iConsLii  
       2019-04-06 13:14:51 +08:00 via Android
    可以在第一页跳到第二页的时候,记录个最新的 ID 或者时间点,在后面几页都带上
    ffeii
        7
    ffeii  
       2019-04-06 13:26:23 +08:00   1
    排序会实时变动的列表不适合分页
    kltt22
        8
    kltt22  
       2019-04-06 13:35:29 +08:00 via Android
    起始 ID +数量
    Vegetable
        9
    Vegetable  
       2019-04-06 13:55:58 +08:00
    说用 id 的是搞笑呢?你这个起始 id 被顶到第一位怎么办?

    这不是一个技术问题,而是设计问题.不用去纠结这个.就算是要纠结也是产品经理该纠结的事情.

    看第一页的时候,第二页的某个帖子有人回复,那么我翻到第二页就看不到这个帖子了,同时看到了第一页的最后一个帖子.
    极端情况下会出现翻到第二页发现和第一页的内容完全相同.
    这是无法用技术解决的.只能从设计上就降低这个问题带来的影响,并且需要考虑的情况非常多.提高系统复杂度,造成用户学习困难.
    这其实是一个非常常见的问题,但是一直也没有一个合理的解决办法,以至于大家都默认了这个状态是对的.并不是大家没有注意到问题,而是这真的没有合适的方案.
    回复时间排序方案下,每一个帖子的索引顺序都是动态变化且毫无规律的,可能向前也可能向后.而用户看帖和翻页都是需要一定时间的.单向翻页没办法保证不出现重复和遗漏.任何尝试解决的方案都至少会打破排序规则和页面显示条数这两个限制中的一个.

    所以干脆就不用回复时间排序,这并不是什么好的规则,只能说中规中矩.V 站作为一个社区就没有采用根据回复时间排序的规则,也挺好的.
    信息流现在也不太使用时间排序了不是吗?都是推荐排序了.这可能也算你说的解决方案之一吧.
    tangweihua163
        10
    tangweihua163  
       2019-04-06 15:01:40 +08:00
    “加载更多” ???
    akira
        11
    akira  
       2019-04-06 20:42:51 +08:00
    2l 的方案就是最简单的了。
    后端的方案不是没有,但是都略重
    night98
        12
    night98  
       2019-04-07 04:32:57 +08:00 via Android
    全部取缓存,定时任务刷新缓存,设定 30-120 秒时间刷
    Ultraman
        13
    Ultraman  
       2019-06-21 08:12:51 +08:00
    据观察小草就存在这个问题并且看起来没有被处理
    .wwads-cn { border-radius: 3px !important; } .wwads-text { color: var(--link-color) !important; }
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5247 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:22 PVG 09:22 LAX 17:22 JFK 20:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86