将项目保存为增量json diffs?

时间:2013-05-12 14:51:29

标签: javascript django json

我一直在构建一个Web绘图程序,其中用户的图稿的状态被保存为json对象。每次我添加到客户端的撤销堆栈(只是一个描述项目状态的json对象数组)时,我也希望将状态保存到服务器。

我想知道是否有一种优雅的方法[1]只发送差异然后[2]能够稍后下载项目并重新创建项目的当前状态?我担心这可能会变得混乱,并且趋向于在每个撤消步骤中上传完整的json项目状态。对项目有任何建议或指针,可以优雅地解决这类问题吗?

1 个答案:

答案 0 :(得分:2)

有趣 - 而且非常大 - 问题。 许多实现/模式/解决方案适用于此问题,它们会根据您跟踪更新的“文档”类型而有所不同。 无论如何,一个避免生气的简单方法是,而不是保存“状态”,保存“产生这些状态的命令”。

如果你的应用程序是完全确定的(我认为它是,因为它是一个绘画程序),你可以确定在给定时间和每个命令在每次执行时,结果都是相同的。

所以,我会记下一个代表程序中可用命令的“字母”:

  • 绘制[x,y,尺寸,颜色]
  • 擦除[X,Y,大小]
  • 将[X,Y]

等等。您可以从SVG实施中获取灵感。然后向/从服务器推送/拉出命令串:

timestamp: MOVE[0,15]DRAW[15,20,4,#000000]ERASE[4,8,10]DRAW[15,20,4,#ff0000]

这显然只是一种普遍的,伪编码的想法。希望你能得到一些灵感。