![]() |
1
3
我不太熟悉这个主题,但是我可以向您指出一个开源(ApacheLicense2.0)项目,它可能非常有用。 它是一个diff、match和patch库,用多种语言编写,包括来自Google工程师的javascript,并在多个在线协作编辑服务中使用。 以下是资源列表:
|
![]() |
2
1
一个简单的方法,假设您知道服务器上的副本不会改变,只需发送一个编辑列表(删除和添加),其中删除部分表示为开始和结束索引,添加部分表示为开始索引,文本表示为插入。 如果您有不止一个简单的diff算法(我不确定您所说的“字符串比较不是问题”),您还可以检测移动或复制的文本块,并将其作为移动或复制的文本块的开始和结束索引发送,以及插入的目的地。 请注意,您需要确保跟踪您的索引是指原始文档还是迄今为止编辑的文档。避免此问题的一个简单方法是始终从文档结尾到开头执行编辑;然后早期编辑不会影响后期编辑指定的偏移量。
有关这种方法的示例,请参见
|
![]() |
3
1
用户执行的任何编辑都可以有效地分解为:从x中删除长度y;在x处插入文本“whatever”。x和y是从文本开始的字符偏移量;y是字符数;“whatever”是任何字符串。你说你不需要帮助计算差异,但是一个例子是 here ,只是它的输出比您需要的要丰富,但是它确实标识了“删除和插入”,所以,只需更改输出部分。 可以调整将数据发送到服务器的确切格式,但我认为这样做没有多大的好处--在等待测量之前,我会先将命令发送为D表示删除,I表示插入,数字以十进制表示,插入的字符串以引号形式表示。一旦您对正在执行的实际传输有了一些统计,您就可以看到数字(十进制与二进制)和引号中的开销有多大,但我怀疑这并不是所有有意义的(如果事实证明是这样的话,您可以尝试各种方法,例如从最新的插入或删除点进行偏移,而不是总是这样从一开始,使事情更快)。 您可以每隔几秒钟对用户正在做的事情进行一次采样,然后在过去几秒钟(如果有的话)内发送增量更改——这样,您发送的每个数据包都将很小,如果网络连接或用户的计算机/浏览器崩溃,用户不会损失太多工作。 |
![]() |
4
0
您可以每500毫秒发送一次更改,因此,在最后500毫秒中所做的任何更改都将被发送,但只有在发生更改时才发送数据。 在这种情况下,您可以发送已更改单词的位置,然后只发送整个单词,但我希望该位置位于文本的前面。 它不会有几个句子的价值,但是可能会有几个单词,但是,如果你按顺序发送它们,那么结果应该是一致的。 |
![]() |
5
0
因为有很多方法可以进行编辑——即使是在500毫秒这样的短时间内——包括 拖放或剪切和粘贴文档内或文档外的大段文本 --我不知道是否会有什么东西可以很好地覆盖所有的场景。从表面上看,这当然不是对您问题的回答,但我会仔细考虑与更改界面以限制文本大小和将现有文本拆分为小块相比,开发和维护类似内容的困难。 也许在你的情况下这是不可能的,但如果是的话,我想最终用这种方式避开这个问题并在编辑后发送完整的文档会省去很多麻烦。 |
![]() |
Softly · 单选按钮未按预期取值 1 年前 |
|
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
![]() |
assembler · Nextjs没有处理发布请求 1 年前 |
|
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
![]() |
Toniq · javascript为php保存多维数组 1 年前 |