如何以良好的性能更新修改后的字符串
How to update a modified string with good performance
我正在创建一个可以同时被许多用户修改的文档。为了简化文档,可以将其视为字符串。在进行修改的那一刻,整个字符串被发送到所有客户端,并且他们的字符串版本被替换为新的版本。就通过网络发送的数据量而言,这对于大字符串来说是非常沉重的。所以我想尽可能少地发送,即使这意味着客户端需要更多的工作。
我正在使用javascript,但这并不重要。
我首先将字符串保存为变量"oldstring",经过修改后,我得到了变量"newstring"。我发送变量"message"(目前等于"newstring")。"消息"由所有客户端接收,并使用它更新他们的"旧字符串"
非常感谢所有的帮助
您可以使用Google Diff/Match/Patch库来实现这一点。它具有Python、C++、Java、LUA、Objective C和Javascript的绑定。您可以将原始补丁下载到客户端,在服务器端生成一个补丁列表(您需要跟踪哪个客户端有哪个版本,以了解起点是什么;这可以在客户端或服务器上完成),将客户端本地修订版的补丁拉到客户端的最新版本,并使用客户端库应用补丁。在中获得更改后,您需要更新该客户端修订跟踪编号。
为了完整起见,我包含了一个实现示例。我对这个库的工作效果印象深刻,并打算把它放在我的工具带里。
// C# server-side code
DiffMatchPatch.diff_match_patch differ = new DiffMatchPatch.diff_match_patch();
// I'm using literals, you'd pull these from a DB, etc.
var results = differ.patch_make("ABCDEFG", "ABCDEFQ");
var serializedResults = differ.patch_toText(results);
// Send serializedResults to client...
在客户端:
// Javascript client-side code
var patcher = new diff_match_patch();
// The below literal is what *would* be sent
var patches = patcher.patch_fromText("@@ -3,5 +3,5 @@'n CDEF'n-G'n+Q'n");
var results = patcher.patch_apply(patches, 'ABCDEFG');
alert(results);
相关文章:
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- 如何以良好的性能更新修改后的字符串
- 修改作用域变量后,未更新作用域绑定
- 修改req.url;t更新url参数(req.query)
- Polymer:当数组中的对象被外部代码修改时,更新dom重复元素
- AngularJS:深度对象修改后视图不更新
- 修改其<源>元素的 src 属性后,视频不会更新
- 如何修改我的 jQuery 以更新以不同方式激活的切换按钮上的 html
- 挖空文本输入修改可观察不更新文本
- 创建 Google 脚本,以便在日历活动更新时对其进行修改
- 当表单被 js 动态修改时,如何更新 yiiactiveform 设置
- 为什么当媒体查询更新 CSS 规则时,修改 CSS 规则会失败
- 挖空样式绑定在修改基础数据时不更新
- 更新/修改从dojo数据存储/JsonRestStore检索到的对象
- 如何在angular js中修改和更新数据表行
- 工厂中与控制器作用域绑定的已修改数据不会更新
- EmberJS -在渲染前修改模型并在更新时重置
- 如何在修改对象后更新html中的数据
- 在Ember中,我如何在ArrayController的内容被修改后更新视图
- {{警报更新.currentPage}} in指令在angular-route中每修改一次路由