许老师你好,最近在做一个前端图标编辑的 web 应用,遇到了undo/redo 需求,项目之前是针对部分 commander (涉及对画布的增删),将整个画布数据拷贝一份存入,没有持久化在内存中,undo/redo 将数据取出来重绘。性能非常差,数据量上去之后,直接卡死。现在这部分在重构,想要实现你文中表述的样子,只是对修改的部分存储,我们画布元素分为节点(node) 和边(edges),修改只针对这两种,包括修改样式、增加边或者节点,删除边或者节点,我想这增加修改我会将对应的数据存下(有元素id),redo/undo 的时候,与 base 数据合并,提供给场景,但是删除怎么增量保存呢?
另外数据保存到浏览器的 localStrorage 好还是 indexedDB 中较好呢
作者回复: 1、删除可以看作parent的items属性修改,也可以看作自身deleted属性的修改。
2、localStorage 比较通用、易用,indexedDB 更加强大。