我正在使用diff_mainGoogle的DiffMatchPatch库的方法来获取差异,然后我在我的应用程序中使用.考虑这种情况:
旧字符串:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Run Code Online (Sandbox Code Playgroud)
新字符串:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
};
Run Code Online (Sandbox Code Playgroud)
我得到的加法差异是:
;
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c
Run Code Online (Sandbox Code Playgroud)
然而,对于人类消费来说,似乎更合理的差异是:
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
}; …Run Code Online (Sandbox Code Playgroud) 所以,我的应用程序中有一个谷歌文档类型功能,可以由多个用户同时编辑. 当只有一个用户更新文档时,Diff-match-patch对我来说很好.
但是当它说docs已经由user1更新并且没有传递给user2时(由于套接字错误或网络错误),它会生成错误的数据.
例如 - '堆栈溢出是55666'.是我的文档,由多个用户编辑.现在,user1将其更改为'Stack overflow is 6.'
并计算diff并将其发送到服务器,但在此之前user2已将其更改为其他内容,比如说'Stack overflow is 25552.'.现在,当应用补丁(来自user1)时,它会产生错误的结果
'Stack overflow is 252.'
那么如何管理它以实现并发更新?我可以使用Socket,这样如果其他人更改,我会将更改发送给其他用户,以便他们可以拥有最新的更新数据,但如果更改很多,则UX可能会很糟糕,因为其他用户可能会看到随机更改.
diff_match_patch 可以用来创建可以在 diff2html 中使用的统一 diff 字符串吗?