隨想(三) -- 如何給基於Javascript的rich editor添加協同功能

實現背景
手頭已經有一個基於Javascript的富文本編輯器,基本架構採用MVC,其中View層負責相應用戶行爲(例如文本輸入等),之後把對應的行爲通知Controller, 由Controller把行爲封裝成命令(command),由命令來操作數據,之後數據層觸發各種change事件,通知View層,View層再進行渲染。大體結構如下:


實現方案
基本思想:
1,儘量在少改動現有代碼結構的基礎上引入協同的邏輯
2,考慮到參與人員大都熟悉javascript開發,而在server端開發經驗很少,所以儘量簡化協同server的邏輯,使其僅僅從事命令的排序和轉發。
基本架構如下:

其中:
1, 協同模塊和協同server之間,採用websocket進行通信。
2,之前命令裏嵌套層次太深,在命令序列化的時候,效率太低,所以把命令重新改寫,保持兩層結構,第一層是複合命令,第二層原子命令。符合命令包含若干原子命令,但不能直接對數據進行操作,數據操作的工作都有原子命令完成。
3,爲了提高用戶輸入響應時間(因爲先發送命令,等到命令返回後再執行,時延較大),對於用戶已經鎖定的段落,採用先執行再發送的策略
4,爲了減少流量佔用,對於序列化後的命令進行壓縮






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章