snapshots & patches & actions
Snapshots: 数据快照
不能反应用户做的改变(对比有昂贵成本)
序列化成本大
不能合并(对比有昂贵成本)
snapshot 的形式,在 undo/redo 需求下,当涉及来自服务器的改变时,undo 也会撤销来自服务器的改变
Patches: JSON-patches 补丁
可以合并
序列化成本小
可以仅仅 undo 本地的修改,而来自服务器的修改可以生效
缺点:并行操作下,多个 patches 可能有冲突,这是因为 patches 只能描述某部分数据改变后的结果,而不是如何改变此数据。比如价格原来是 15,两个人做出两个动作涨 1 块和涨 2 块,patch 类似 {op:'replace', path: 'price', value: 16},{op:'replace', path: 'price', value: 17},无论哪个操作生效都不是我们想要的 18 块。 这是 JSON-patches 的本质导致的,不能描述涨几块这个逻辑。
Actions: 捕获用户的意图
自定义格式来描述用户意图,类似 redux 的 action,需要多端约定自定义格式,成本高。
使用 id 而不是 路径,可以极大避免冲突,因为即时并行操作,id 不会改变,但路径会。
最后更新于
这有帮助吗?