AgileTC undo 问题修复思考

agiletc · 2021年08月04日 · 最后由 agiletc 回复于 2022年01月05日 · 1473 次阅读

背景

当前的 agiletc 存在 bug。用户执行撤销 (undo) 操作时,前后端无 message 交互,导致前后端的版本信息会失配,当用户再次编辑时,会出现版本信息不一致的报错。同时,撤销的动作也无法同步给其他的在线用户。

分析

前端的撤销/重做等操作,应该与其他的编辑操作一致,向后端发送 patch,从而保持版本信息的一致性。

解决办法

方案一:前端解决

1.客户端保存 redoDiffs/undoDiffs 的列表,客户端操作时将 patch 分别放入 2 个列表;

2.客户端做 undo/redo 时分别从列表中进行偏移操作,同时将相关的 patch 发送给服务端,服务端转发给其他客户端;

3.服务端保留用例最新内容信息。

4.客户端需要区分正常编辑的 patch 和 undo/redo 的 patch,因为不同的 patch,版本信息变化逻辑不一致。

缺点:1.改造成本比较高,对原 patch 处置机制进行梳理,适配 undo/redo 场景。2.客户端操作链路复杂度提升,初步分析产生操作冲突的概率会增加,且前端在多节点情况下的性能可能会进一步下降。

优点:1.后端无需改造。

方案二:后端解决

前端执行撤销/重做时,给后端发送 undo/redo 的消息。

优点:1.前端逻辑简化,JsonDiff 计算减少,理论上能够提升多节点场景下编辑性能;2.中心化处理后,推测编辑冲突概率会降低。

缺点:1.服务的复杂度提升,用户太多的场景下可能出现性能瓶颈。

共收到 2 条回复 时间 点赞

很清晰的问题分析和技术方案选型说明你。好奇问下,最终选择了哪个方案?

选择的方案 2,前端资源太紧张 😓

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册