Operational Transformation 在 JavaScript 上的實作

最近因緣際會下接觸到 Operational Transformation 這東西… OT 是 Google Wave、Hackpad、Etherpad 等等即時協作工具背後的基礎。Wikipedia 的說明依然是有些抽象,想了解一些基本觀念的話,這篇會是不錯的起點。

根據前 Google Wave 工程師的說法:實作 OT 並不是一件容易的事情。當初他們花了兩年寫出 Google Wave,如果搬到今天,可能也還是需要兩年。幸好,已經有一些現成的 OT 實作可以參考:

ShareJS

http://sharejs.org/

ShareJS 就是前面那位前 Google Wave 工程師的作品。相較於其他函式庫,ShareJS 走的是全端全包的路線。從跟前端編輯器的整合各式 OT 演算法的定義與實作、直接就可使用的整套同步系統、甚至還有自己自製的 Database Frontend

不過,寫這篇文章的時候,ShareJS 正在進行 0.7 版的改版,文件跟程式碼有些混亂,不太容易理解…

ot.js

https://github.com/Operational-Transformation/ot.js/

ot.js 是另一套 OT 在 js 上的實作,包含 OT type 與基本的 server/client 的實作。跟 ShareJS 比起來較單純,也比較好懂。缺點是文件很少,範例似乎也有些 bug。

btw, firepad 是基於這套做出來的。

changesets

https://github.com/marcelklehr/changesets

我目前使用的是這套實作,它只實作了針對文字的 OT ,並不包含 server/client 等等其他元件。不過,他的文件應該是最清楚的,也支援從 diff 建立 OT 。

 

我想 OT 在這幾年應該會有不少有趣的應用?反正現在玩玩也不吃虧 :P

 

廣告