snapshots & patches & actions

Snapshots: 数据快照

  1. 不能反应用户做的改变(对比有昂贵成本)

  2. 序列化成本大

  3. 不能合并(对比有昂贵成本)

  4. snapshot 的形式,在 undo/redo 需求下,当涉及来自服务器的改变时,undo 也会撤销来自服务器的改变

Patches: JSON-patches 补丁

  1. 可以合并

  2. 序列化成本小

  3. 可以仅仅 undo 本地的修改,而来自服务器的修改可以生效

  4. 缺点:并行操作下,多个 patches 可能有冲突,这是因为 patches 只能描述某部分数据改变后的结果,而不是如何改变此数据。比如价格原来是 15,两个人做出两个动作涨 1 块和涨 2 块,patch 类似 {op:'replace', path: 'price', value: 16},{op:'replace', path: 'price', value: 17},无论哪个操作生效都不是我们想要的 18 块。 这是 JSON-patches 的本质导致的,不能描述涨几块这个逻辑。

Actions: 捕获用户的意图

  1. 自定义格式来描述用户意图,类似 redux 的 action,需要多端约定自定义格式,成本高。

  2. 使用 id 而不是 路径,可以极大避免冲突,因为即时并行操作,id 不会改变,但路径会。

最后更新于