美文网首页
2019-05-05 朋友圈动态展示与刷新方案

2019-05-05 朋友圈动态展示与刷新方案

作者: 刘明_d589 | 来源:发表于2019-05-05 20:50 被阅读0次

    开发过程中经常会有类似朋友圈、动态或空间相关功能。对于类朋友圈动态有几类特征:

    1. 无需展示页码
    2. 无需展示总条数
    3. 排序总是随时间倒序
    4. 动态可以创建和删除,但一般不可编辑
    5. 新好友加入,所有动态依然按时间倒排

    一般简单展示方案是分页查询,由客户端传递参数页数页码,后台通过参数进行分页查询。
    不过这个方案弊端过于明显:
    动态如其名,是动态的。我们认为增加是经常的,删除是少数的,这些操作会影响动态刷新过程中的分页效果。

    优化方案:
    这里优化方案都才用了一个哨兵字段,可以是时间或id(如果id大小关系与时间前后关系对应),这里用id来表示

    方案一

    1. 在获取第一页时,记录第一个元素的id字段。后续分页带上哨兵id(maxId),每次翻页页码增一。后台查询增加 id < #{maxId}判断
    2. 在获刷新新动态时不带哨兵参数,同时页码置为1,此时丢弃旧数据,重置哨兵id,向后翻页重新累加页码。
    

    解决问题: 此方案解决了新增动态的问题,不会因为新增动态导致获取下一页动态时,获取到已经获取过的老数据。

    不足点:

    1. 此方案未解决上述操作4、5引起的问题。

    操作4会导致后面的动态前移翻页时紧接删除内容后面的数据将被跳过
    操作5会导致已有数据后移翻页时可能拉到重复数据
    因此在不支持删除和新增朋友,或者此类场景极少出现时,可以考虑使用此方案

    2. 刷新新数据时会丢弃老数据

    方案二

    1. 不使用页码功能,每次拉取一页数据后重置哨兵id,获取下一页时带上新的哨兵id(maxId),后台查询增加 id < #{maxId}判断,不做分页,只限制查询条数。
    
    2. 在获刷新新动态时不带哨兵参数,同时页码置为1,此时丢弃旧数据,重置哨兵id,向后翻页重新累加页码。
    

    解决问题: 此方案解决了操作4和5对其他动态的影响问题。删除动态与新增好友导致的动态变化都不会影响已有数据的展示

    不足点:

    1. 已经展示出来的操作4和操作5本身涉及到的动态未能及时刷新,依赖用户刷新最新数据
    2. 刷新新数据时会丢弃老数据

    总结

    一般来说,使用方案二已经有较好的展示效果了,如果还需进一步优化。可以考虑一些额外方案,逻辑会相对复杂,效果有限,且需额外考虑与已有逻辑是否冲突:

    1.旧数据丢弃问题:刷新新数据时,设置maxId为反向哨兵id(minId),当拉取最新数据时,带上反向哨兵id,后台查询增加 id > #{minId} 判断,旧数据不清除。
    

    相关文章

      网友评论

          本文标题:2019-05-05 朋友圈动态展示与刷新方案

          本文链接:https://www.haomeiwen.com/subject/fsqkoqtx.html