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 方面相当不错。我很难弄清楚算法。
我考虑过的事情:
- 脏检查[但是,它是脏的吗?]
- Delta Differencing [但与 ReactJS 一样,每次都必须更新整个应用程序状态]
- Object.observe[浏览器兼容性还不现实]
所以,如果你有什么可以帮助我朝着正确的方向前进,我将非常感激。
允许并发 editing/manipulation 或 objects/texts 等的实时协作工具通常使用 Operational Transformation algorithm.
的变体
OT 不是 理解起来很简单,更确切地说是实现,所以我建议你看看已经准备好的库,例如:
OT 以一些非常基本的方式工作,类似于 GIT
作为对您在评论中发布内容的更新。
你说你正在使用 Python。我想您不会重建整个代码库,但请记住,使用事件驱动的服务器端语言通常会使实时协作工具受益 很多。
由于您使用的是 Python,您可以查看 Twisted Framework
我正在构建一个大型实时协作 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 方面相当不错。我很难弄清楚算法。
我考虑过的事情:
- 脏检查[但是,它是脏的吗?]
- Delta Differencing [但与 ReactJS 一样,每次都必须更新整个应用程序状态]
- Object.observe[浏览器兼容性还不现实]
所以,如果你有什么可以帮助我朝着正确的方向前进,我将非常感激。
允许并发 editing/manipulation 或 objects/texts 等的实时协作工具通常使用 Operational Transformation algorithm.
的变体OT 不是 理解起来很简单,更确切地说是实现,所以我建议你看看已经准备好的库,例如:
OT 以一些非常基本的方式工作,类似于 GIT
作为对您在评论中发布内容的更新。
你说你正在使用 Python。我想您不会重建整个代码库,但请记住,使用事件驱动的服务器端语言通常会使实时协作工具受益 很多。
由于您使用的是 Python,您可以查看 Twisted Framework