原版 1.1.12 已经很好用了,排队机制也很清晰。我这次不是重写,而是在实际使用中遇到了一些网络环境下的边缘情况,做了一次稳定性修正。
最近论坛偶尔会有卡顿。原版在这种情况下,可能会出现一个比较麻烦的现象:提交动作卡住之后,整个排队逻辑就停在那里,后面的帖子不会继续执行,页面看起来还在“排队中”,但实际上已经不动了,回帖计数也可能变得不准确。虽然可以手动清空队列,但是一个个点回来也有点烦人。
现在增加了 90 秒无进展检测。如果在这段时间内既没有成功提示,也没有状态变化,就会判定为卡住,自动结束当前任务并释放队列,让后续帖子继续执行。不会再出现“一个页面卡死,全队列跟着停摆”的情况。
另外一个小问题是 65 秒回复。原版是每 5 秒轮询一次,如果刚好错过 CD 到点的瞬间,实际提交会被拖到下一个 5 秒间隔,于是理论 60 秒 CD 变成 65 秒。现在改成 CD 到点立即尝试一次提交,interval 只负责失败后的重试,节奏更贴近真实 CD。
还有一个体验问题是 24 次重试上限。原版在达到上限后可能会在 interval 中反复触发提示,造成连续弹窗。现在改成只触发一次处理,不会再反复刷提示。 最后,也是我比较在意的一点:在网络不稳定时,存在“服务器已经成功接收回复,但前端没有显示成功提示”的可能。如果盲目重试,就有重复回帖风险。新版在进入不确定状态后,每次重试前都会先确认是否已经回帖。如果已经成功,就立即停止排队,避免重复提交。 整体来说,这一版没有增加复杂度,也没有改变原有思路,只是把真实网络环境下可能出现的问题补齐,让它更稳一点。 再次感谢@福黎 的原始实现。
我只是根据实际使用体验做了一些修正。
如果大家使用过程遇到问题,欢迎交流,一起慢慢完善。
|