点第一次加载更多正常,点第二次开始出现重复条目,同一条评论被渲染两次,越往后重复越多。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

SELECT * FROM wp_comments
WHERE comment_post_ID = 128 AND comment_approved = '1'
  AND comment_ID < 9021
ORDER BY comment_ID DESC LIMIT 20;

分页参数用的是页码换算的 offset,两次请求之间新增了评论,整体位移一条,第二页就把第一页末尾又取了一遍。评论按时间倒序时新数据插在最前面,位移最明显。这一点先确认清楚,后面就不用反复试。

「评论加载更多重复」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,改成游标分页,用上一批最后一条的 comment_ID 作为起点,不再算 offset;请求参数里带上排序方向和总数,前端据此判断是否还有下一页;已经渲染过的编号在前端去重,重复数据直接丢弃,不要覆盖。

改完照着核一遍,连续点五次加载更多,评论不重复,新插入的评论出现在下一次请求的最前面。

作者 9823189