JS - 如何跨同一网络应用程序的多个实例实时更新 DOM?

JS - How to update DOM in realtime across multiple instances of the same web app?

我正在构建一个大型实时协作 Web 应用程序。它是一个支持 HTML、CSS 和 JS 编程的 Web IDE 和一个可以反映 la JSFiddle、Plunker 等结果的舞台区域

现在,不同之处在于,它将支持多用户实时协作,查看 Web 应用程序的同一实例的人们将能够一起编写代码,以反映所有打开的实例。我已经弄清楚了竞争条件,会话管理

我遇到的问题是

how to reflect the typing and/or deleting along with caret positioning across these multiple instances giving the illusion that when one person is typing, he is actually typing on all the instances.

另一件事是 RactiveJS

updates only those parts of the page that are out of date. Tedious DOM manipulation is a thing of the past.

在他们的Demo中这是一个非常好的效果。想象一下,你在 JSFiddle 上,你不必每次都重新 运行。所以,我的问题是,他们是怎么做到的?它背后的概念是什么?

我不想为此使用任何库。我在 JS 方面相当不错。我很难弄清楚算法。

我考虑过的事情:

  1. 脏检查[但是,它是脏的吗?]
  2. Delta Differencing [但与 ReactJS 一样,每次都必须更新整个应用程序状态]
  3. Object.observe[浏览器兼容性还不现实]

所以,如果你有什么可以帮助我朝着正确的方向前进,我将非常感激。

允许并发 editing/manipulation 或 objects/texts 等的实时协作工具通常使用 Operational Transformation algorithm.

的变体

OT 不是 理解起来很简单,更确切地说是实现,所以我建议你看看已经准备好的库,例如:

OT 以一些非常基本的方式工作,类似于 GIT


作为对您在评论中发布内容的更新。

你说你正在使用 Python。我想您不会重建整个代码库,但请记住,使用事件驱动的服务器端语言通常会使实时协作工具受益 很多

由于您使用的是 Python,您可以查看 Twisted Framework