<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在線文檔有哪些技術(shù)難點

          共 1208字,需瀏覽 3分鐘

           ·

          2021-12-16 05:26

          實現(xiàn)一個多人協(xié)作在線文檔有哪些技術(shù)難點?


          想知道實現(xiàn)類似于語雀、石墨文檔或騰訊文檔等產(chǎn)品的難點在哪些地方?


          大體上說,多人協(xié)作的在線文檔在技術(shù)上主要分成三大塊:“在線”、“多人協(xié)作”和“文檔編輯”。


          先說“在線”,在線其實就是個B/S或者C/S架構(gòu),也就是一個web/native用戶端加上一個服務(wù)器端。這里的技術(shù)難點不算很大,主要就是把數(shù)據(jù)同步的問題解決了,即如何讓用戶端的輸入及時準確地同步到服務(wù)器端,當然同時還要考慮網(wǎng)絡(luò)傳輸失敗、性能等等問題,這里web側(cè)比較好的一個開源解決方案就是 PouchDB,它可以幫你快速實現(xiàn)數(shù)據(jù)在瀏覽器和服務(wù)器端的雙向同步,有興趣的可以了解一下。


          然后是“多人協(xié)作”,本質(zhì)上是一個分布式系統(tǒng)上常說的 Multiple Leader Duplication,任何一個用戶端都可以視為一個 Data Leader,這些 Leader 之間同步數(shù)據(jù)必然會遇到?jīng)_突的問題。


          對于 Multiple Leader Duplication 的沖突問題,解決方法也就那么幾種:


          直接避免產(chǎn)生沖突。具體方法就是不讓多個用戶同時編輯同一處地方,這種解決方法最有效也最粗暴,具體要看產(chǎn)品形態(tài)適不適合這種方案。


          把沖突暴露給用戶,讓用戶自己解決?,F(xiàn)在大多數(shù)專業(yè)的版本控制軟件就是這么做的,但不適用于在線文檔這種大部分用戶都是非專業(yè)的產(chǎn)品。


          給寫入操作打上一個全局 index,可以是時間戳,可以是序列號,總之是全局的并且是遞增的即可,然后任何沖突的地方,都選擇 index 較高的那個寫入。這樣的好處就是沖突的解決是完全自動化的,不需要用戶參與。缺點就是如果遇到同步間隔很長的情況,會丟失很多用戶的輸入。比如你斷網(wǎng)寫了一小時文章,然后又連網(wǎng)同步,發(fā)現(xiàn)被你同事幾分鐘前的修改給覆蓋了。


          1、寫 UI,并且把這些 Model 狀態(tài)映射到 UI 上,這里完全不需要考慮輸入,就是很純凈地把一堆 Model 映射到 UI 上。比如文檔對象的渲染、編輯器各種狀態(tài)的實現(xiàn)等等


          2、處理用戶的輸入,修改相應(yīng)的狀態(tài),比如用戶在界面空白處點擊了鼠標右鍵,我們需要打開右鍵菜單,具體做法就是把編輯器狀態(tài)里的右鍵菜單設(shè)置為打開,并且設(shè)置好位置即可。


          雖然說起來這么簡單,但實際開發(fā)的時候確實有很多難點:


          用戶的輸入具有復(fù)雜性。比如在一個地方按下鼠標(mousedown),那么光標應(yīng)該移動過去,但如果用戶這時繼續(xù)拖動鼠標(mousemove),那么就應(yīng)該是一個拖選事件,如何正確區(qū)分點擊和拖選就是一個比較麻煩的問題。類似的問題還有快捷鍵的實現(xiàn)、點擊穿透問題,如果有移動端的話還會遇到定制光標樣式的問題。


          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷激情在线视频 | 91九色视频网站 | 99re在线观看 | 波多野结衣av中文字幕 | 亚洲免费黄色网 |