<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>

          開發(fā)在線文檔時(shí),這個(gè)技術(shù)難點(diǎn)你解決了嗎?

          共 3492字,需瀏覽 7分鐘

           ·

          2021-08-01 18:53

          “時(shí)勢(shì)造英雄”,是亙古不變的真理。在當(dāng)前的時(shí)代背景下,在線文檔可以稱得上是這樣的“英雄”。
           
          自 2020 年新冠疫情爆發(fā)以來,遠(yuǎn)程辦公徹底顛覆了傳統(tǒng)的企業(yè)管理模式,在線文檔作為遠(yuǎn)程辦公軟件的重要組成部分也同樣迎來了高速發(fā)展。
           
          如今,即便市場(chǎng)中已經(jīng)有了騰訊文檔、石墨文檔、飛書、語雀和靈犀文檔等在線辦公產(chǎn)品,但在線文檔本身仍面臨功能、技術(shù)、數(shù)據(jù)安全、服務(wù)、生態(tài)等多方面的考驗(yàn),如數(shù)據(jù)處理效率、多人協(xié)作、二次擴(kuò)展、系統(tǒng)集成、框架兼容性問題等。
           
          從技術(shù)角度來看,在線、數(shù)據(jù)處理和多人協(xié)作是開發(fā)在線文檔系統(tǒng)最關(guān)鍵的技術(shù)指標(biāo)。不過,在線和數(shù)據(jù)處理均已有較成熟的技術(shù)方案,實(shí)現(xiàn)難度不大。因此,多人協(xié)作才是影響在線文檔系統(tǒng)易用性的核心要素。
           

          什么是多人協(xié)作?

           
          多人協(xié)作,即多人同時(shí)對(duì)同一份文檔進(jìn)行編輯,用戶無需刷新即可看到其他人所做的修改。Google Docs、騰訊文檔、石墨文檔、Quip 等都具備多人協(xié)作功能。
           
          那么,多人協(xié)作是如何實(shí)現(xiàn)的呢?
           
          任何信息如要做到多人實(shí)時(shí)編輯與展現(xiàn),需要實(shí)現(xiàn)以下三步:
           
          • 操作化
          • 可傳輸
          • 可還原
           
          這三步,類似于編解碼過程。首先將信息轉(zhuǎn)換為一組操作集合,然后將操作通過網(wǎng)絡(luò)傳輸給其他終端,最后在本地終端將操作還原為信息。
           
          這些步驟看起來簡(jiǎn)單,但每一步都需要考慮很多。比如操作化過程中,在對(duì)信息進(jìn)行分割與組合時(shí),如何確保信息的所有變化都可以分解為操作的集合、如何令操作覆蓋信息的所有變化,以及如何決定分割的顆粒度。
           
          可傳輸需要考慮以下幾點(diǎn):
           
          1. 傳輸內(nèi)容
            1. 原始文本
              1. 清晰
              2. 冗余
            2. 壓縮技術(shù)
              1. 邏輯壓縮
              2. 協(xié)議壓縮
              3. 手動(dòng)壓縮
          2. 網(wǎng)絡(luò)協(xié)議
            1. Socket
              1. TCP
              2. UDP
            2. HTTP
            3. WebSocket
          3. QoS(Quality of Service,服務(wù)質(zhì)量)
            1. 快速失敗
            2. 自動(dòng)回滾
            3. 自動(dòng)重連
            4. 自動(dòng)恢復(fù)
           
          可還原主要涉及:
           
          1. 絕對(duì)操作的還原
            1. 控制體積
            2. 合理的提示
          2. 相對(duì)操作的還原
            1. 嚴(yán)格的順序性
            2. 從源頭保障順序性
            3. 順序性的補(bǔ)救
          3. 本地操作的還原
            1. 過濾收到的操作集合
            2. 從源頭細(xì)化操作顆粒
            3. 本地保存本地執(zhí)行
          4. 無入侵的還原
            1. 定義入侵
            2. 排除入侵
            3. 千人千面
           
          在了解了多人協(xié)作的基本原理之后,我們來研究一下它的技術(shù)難點(diǎn)。
           

          多人協(xié)作有哪些技術(shù)難點(diǎn)?

           
          多人協(xié)作,本質(zhì)是分布式系統(tǒng)中的 Multiple Leader Replication,即任何一個(gè)用戶端都可被視為 Data Leader,這些 Leader 之間同步數(shù)據(jù)必然會(huì)遇到亂序和沖突問題。這就是多人協(xié)作的主要難點(diǎn)。
           
          對(duì)于 Multiple Leader Replication 的沖突問題,有如下解決方法:
           
          • 避免產(chǎn)生沖突,即不讓多個(gè)用戶同時(shí)編輯同一處地方。該解決方法簡(jiǎn)單粗暴,使用時(shí)需具體查看產(chǎn)品形態(tài)是否適合該方案。

          • 把沖突暴露給用戶,讓用戶自己解決。目前大多數(shù)專業(yè)的版本控制軟件采用了該方法,但它不適用于擁有大量非專業(yè)用戶的產(chǎn)品,如在線文檔。

          • 給寫入操作打上全局 index,可以是時(shí)間戳或序列號(hào),該 index 必須是全局的且遞增。在任何沖突的地方,都選擇 index 較高的那個(gè)寫入。該方法的優(yōu)勢(shì)在于沖突的解決是完全自動(dòng)化的,不需要用戶參與。缺點(diǎn)就是如果遇到同步間隔很長(zhǎng)的情況,會(huì)丟失很多用戶的輸入。


          在實(shí)際開發(fā)在線文檔系統(tǒng)的過程中,Operational Transformation(OT)算法技術(shù)是解決多人協(xié)作沖突問題較為常用的方法。這項(xiàng)技術(shù)誕生于 1989 年,其原理是將文本內(nèi)容統(tǒng)一為以下 3 種類型的操作方式,目的是為用戶提供最終一致性實(shí)現(xiàn):
           
          • retain(n):保持 n 個(gè)字符

          • insert(str):插入字符 str

          • delete(str):刪除字符 str


          在完成上述操作后,OT 算法將正在并發(fā)的操作合并轉(zhuǎn)換,以形成新的操作流,并應(yīng)用在歷史版本上,實(shí)現(xiàn)無鎖化同步編輯。
           
           OT 算法技術(shù)中的操作轉(zhuǎn)換過程
          圖源:
          https://en.wikipedia.org/wiki/Operational_transformation
           
          OT 算法背后的思想其實(shí)非常簡(jiǎn)單,就是在特定的條件下進(jìn)行相應(yīng)的操作轉(zhuǎn)換,因此,OT 主要用于文本,通常很復(fù)雜且不可擴(kuò)展。對(duì)于富文本編輯等更高級(jí)的結(jié)構(gòu),OT 用復(fù)雜性換來了對(duì)用戶預(yù)期的實(shí)現(xiàn),不會(huì)給系統(tǒng)性能造成過多的負(fù)面影響。因此,如今大多數(shù)實(shí)時(shí)協(xié)同編輯邏輯都是基于 OT 算法來實(shí)現(xiàn)的。
           
          正因如此,OT 算法成為了解決當(dāng)前協(xié)同沖突處理最主要的方案之一。然而,即便它已經(jīng)誕生了 30 余年,控制算法相關(guān)的理論早已百花齊放,卻仍無法很好地處理分布式實(shí)現(xiàn)問題,且開發(fā)一個(gè)支持多人實(shí)時(shí)協(xié)同編輯的系統(tǒng)也遠(yuǎn)比想象中的更加復(fù)雜。
           

          實(shí)現(xiàn)多人協(xié)作的突破口在哪里?

           
          由此可見,實(shí)現(xiàn)一款復(fù)雜的多人實(shí)時(shí)協(xié)同編輯系統(tǒng)僅僅依靠算法邏輯是不夠的,還需要根據(jù)不同的業(yè)務(wù)場(chǎng)景(如項(xiàng)目看板、純文本編輯、undo/redo 等),投入大量的研發(fā)成本和時(shí)間,并在不斷摸索中,尋找到產(chǎn)品性能和易用性之間的平衡點(diǎn)。
           
          那么,是否存在一條更為簡(jiǎn)單快捷的解決方法呢?
           
          通過對(duì)市面上多款在線協(xié)同辦公產(chǎn)品的示例代碼進(jìn)行分析,我們發(fā)現(xiàn)這些產(chǎn)品除了運(yùn)用到前文提到的 OT 算法之外,基本都會(huì)借助第三方表格。通過嵌入組件,在線文檔系統(tǒng)很好地支持了多人協(xié)作的最終一致性,給用戶提供了更加易用且多樣化的體驗(yàn)效果,在減少研發(fā)成本的同時(shí),實(shí)現(xiàn)了更高密度的計(jì)算復(fù)雜度,大幅提高了多人協(xié)作效率。
           

          用于多人協(xié)作的表格組件需要具備哪些功能?

           
          首先,是對(duì)于表格的功能支持
           
          由于表格的數(shù)值敏感性遠(yuǎn)高于其他數(shù)據(jù)類型,用作多人協(xié)作文檔時(shí)可以實(shí)現(xiàn)更為細(xì)膩的操作顆粒度和計(jì)算復(fù)雜度。因此,所選用的組件必須具備強(qiáng)大的表格功能支持,不僅要在數(shù)據(jù)錄入、數(shù)據(jù)填報(bào)等方面展現(xiàn)出強(qiáng)大的能力,還要具備各類統(tǒng)計(jì)、計(jì)算匯總、透視分析,以及圖形化手段。
           
          其次,需要具備開放的 API 接口,滿足更多定制化選項(xiàng)。
           
          這類組件需要提供豐富的事件和應(yīng)用程序接口,用于控制單元格狀態(tài)、表單保護(hù)、數(shù)據(jù)傳輸?shù)冗壿?,?duì)于多人協(xié)作而言,還需限制用戶對(duì)同一處內(nèi)容進(jìn)行編輯,以及插入時(shí)間戳(序列化)等功能。
           
          出于好奇,筆者下載試用了網(wǎng)上多款表格組件,發(fā)現(xiàn)能滿足上述需求的屈指可數(shù),而 SpreadJS 無疑是最為亮眼的一款。這款組件主打可嵌入系統(tǒng)的“在線 Excel”,純前端的體系架構(gòu)可以很容易的嵌入系統(tǒng)開發(fā),而無需考慮與原生系統(tǒng)的兼容性。值得一提的是,SpreadJS 采用了稀疏數(shù)組 (Sparse Array) 作為存儲(chǔ)模型,相較于傳統(tǒng)的鏈?zhǔn)酱鎯?chǔ)或數(shù)組存儲(chǔ),稀疏數(shù)組只會(huì)對(duì)非空數(shù)據(jù)進(jìn)行存儲(chǔ),而不需要對(duì)空數(shù)據(jù)開辟額外的內(nèi)存空間。
           
          除了節(jié)省內(nèi)存空間外,對(duì)于表格這類布局松散的數(shù)據(jù)類型,稀疏數(shù)組也更易于構(gòu)建基于行索引的數(shù)據(jù)字典,以便隨時(shí)替換或恢復(fù)整個(gè)存儲(chǔ)結(jié)構(gòu)中的任何一個(gè)級(jí)別的節(jié)點(diǎn),借助這一特性,SpreadJS 在多人協(xié)同中實(shí)現(xiàn)了高效的數(shù)據(jù)回滾和數(shù)據(jù)恢復(fù) (Redo/Undo)。
           
          SpreadJS 的稀疏矩陣存儲(chǔ)模型 (Sparse Array)
           

          結(jié)語

           
          疫情加速了企業(yè)數(shù)字化轉(zhuǎn)型。未來企業(yè)協(xié)同辦公將朝著產(chǎn)品易用性提升、可集成與二次擴(kuò)展能力、與原系統(tǒng)/業(yè)務(wù)的高度契合、滿足最終用戶的使用習(xí)慣等層面發(fā)展。
           
          如何打破技術(shù)壁壘,開發(fā)出既能滿足不同場(chǎng)景下的用戶需求,又具備市場(chǎng)競(jìng)爭(zhēng)力和差異化的在線文檔產(chǎn)品,是 SaaS 企業(yè)和系統(tǒng)供應(yīng)商們首要考慮的問題。
           
          “好風(fēng)憑借力,送我上青云。”在如今競(jìng)爭(zhēng)激烈的在線文檔領(lǐng)域,除了耗費(fèi)大量精力自主研發(fā),學(xué)會(huì)借力打力滿足不同的業(yè)務(wù)場(chǎng)景和客戶需求,或許也是一個(gè)不錯(cuò)的選擇。
           
          如果你想了解更多前端表格技術(shù),歡迎參加本周六舉行的 SegmentFault D-Day 大前端技術(shù)沙龍,葡萄城高級(jí)產(chǎn)品技術(shù)顧問、技術(shù)布道師姚堯?qū)⑴c大家面對(duì)面交流和分享前端電子表格技術(shù)的那些事兒。
           
           
          點(diǎn)擊閱讀原文,了解更多詳情!
          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲啪啪精品 | 男人天堂最新网址 | 久久撸一撸视频 | 蜜桃视频 成人app ios | 亚洲无码在线视频播放 |