精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

可視化+多人協同技術原理和案例分享

開發 前端
NodeGit 可以用于多個領域,例如自動化部署、協作工具、代碼分析、教育工具和 CI/CD 系統等。通過使用 NodeGit,我們能以編程方式訪問和操作 Git 存儲庫,實現更靈活和自動化的版本控制流程。

前言

hi,大家好,我是徐小夕,之前和大家分享了很多可視化低代碼的技術實踐,最近也做了一款非常有意思的文檔搭建引擎——Nocode/Doc:

接下來和大家分享另一個比較有意思的話題——多人協同技術。

文章大綱

  • 多人協同技術方案探討
  • OT和CRDT算法
  • 插曲(互斥鎖(Mutex)原理和代碼實現)
  • yjs協同框架使用
  • yjs多人協同案例

多人協同技術方案探討

多人協同技術方案常見的應用場景主要有:

  • 原型工具(axure,某刀,mastergo等)
  • 文檔辦公類 (飛書文檔,釘釘文檔,石墨文檔等)
  • 設計工具(即時設計,figma等)

主要目的是實現多個人同時編輯一份共享資源, 來提高工作效率。

拋開已有技術本身,我們拿最簡單的富文本編輯器為例子, 如果我們想讓它實現多人同時編輯,有哪些可以想到的方案呢?

  • 覆蓋模式

即每個人保存時都強制以自己的版本為主,即保存最后一次修改,這樣會導致的問題是無法實現真正意義上的共享協作。

  • 鎖模式

也就是對文件”上鎖“。當某個用戶正在編輯文檔時,對此文檔進行加鎖處理,避免多人同時編輯,從而避免文檔的內容沖突。 缺點就是用戶體驗不友好,并且需要等待時間。

  • diff 模式

我們可以采用類似 git 的版本管理模式,多人編輯時利用 webrtc / socket 與服務端通信,保存時通過服務端進行差異對比、合并,自動進行沖突處理,再通過服務推送如SSE(服務端實時主動向瀏覽器推送消息的技術)的方式推送給其他人。

弊端是會出現類似 git 修改同一行,純靠服務端無法處理,需要手動處理沖突。

這里給大家推薦一個有意思的庫 NodeGit。

github地址: https://github.com/nodegit/nodegit

以下是 NodeGit 的一些主要特點:

  • 全功能:幾乎支持 Git 的所有命令,如克隆、提交、拉取、合并等。
  • 高性能:直接調用 C 庫,提供接近原生速度的性能。
  • 易于集成:作為一個 Node.js 模塊,可輕松融入任何 Node.js 項目,無需額外的構建步驟或依賴。
  • 跨平臺:支持 Windows、macOS 和 Linux,讓開發者可以在各種操作系統上工作。
  • 文檔齊全:提供詳細的 API 文檔和示例代碼,便于理解和使用。
  • 社區活躍:開源社區活躍,問題和 PR 能得到及時響應,不斷更新改進。

NodeGit 可以用于多個領域,例如自動化部署、協作工具、代碼分析、教育工具和 CI/CD 系統等。通過使用 NodeGit,我們能以編程方式訪問和操作 Git 存儲庫,實現更靈活和自動化的版本控制流程。

當然以上這幾種方式很難應對復雜場景的多人協作。

OT和CRDT算法

OT 算法是一種用于實時協同編輯的算法,它通過操作 & 轉換來實現數據的一致性。在 OT 算法中,每個用戶對數據的操作(如修改、刪除等)都被記錄下來,并在其他用戶的客戶端進行相應的轉換,從而實現多個用戶對同一份數據的協同編輯。

OT 算法的優點在于它可以實時地反映用戶的操作,并且可以很好地處理并發沖突。但是 OT 算法需要在中心化的服務器上進行協同調度,因此對于大規模的分布式系統來說不太適用。

操作 Operational

基于 OT 的協同編輯核心是:將文檔的每一次修改看作是一個操作,即操作原子化處理,如在第 N 個位置插入一個字符時,客戶端會將操作發送到服務端去處理。

以quill富文本編輯器舉例, 它通過 retain、insert、delete 三個操作完成整篇文檔的描述與操作,如下:

[
    // Unbold and italicize "Gandalf"
    { retain: 7, attributes: { bold: null, italic: true } },

    // Keep " the " as is
    { retain: 5 },

    // Insert "White" formatted with color #fff
    { insert: 'White', attributes: { color: '#fff' } },

    // Delete "Grey"
    { delete: 4 }
  ]

相關地址:https://quilljs.com/docs/delta

Transformation 轉換

用戶將原子化的操作發送到服務端時(必須有中央服務器進行調度), 服務端對多個客戶端的操作進行轉換,對客戶端操作中的并發沖突進行修正,確保當前操作同步到其他設備時得到一致的結果,因為對沖突的處理都是在服務端完成,所以客戶端得到的結果一定是一致的,也就是說 OT 算法的結果保證強一致性。

轉換完成后,通過網絡發送到對應用戶,用戶合并操作,從而得到一致結果。

這意味著 OT 算法對網絡要求更高,如果某個用戶出現網絡異常,導致一些操作缺失或延遲,那么服務端的轉換就會出現問題。

OT算法可視化模型:https://operational-transformation.github.io/index.html

CRDT

CRDT 算法全稱 Conflict-free Replicated Data Type,即無沖突復制數據類型,是一種基于數據結構的無沖突復制數據類型算法,它通過數據結構的合并來實現數據的一致性。

在 CRDT 算法中,每個用戶對數據的修改都會被記錄下來,并在其他用戶的客戶端進行合并,以實現數據的一致性。CRDT 算法的優點在于它可以適用于大規模的分布式系統,并且不需要中心化的服務器進行協同調度。

但是,CRDT 算法在處理復雜操作時可能會存在合并沖突的問題,需要設計復雜的合并函數來解決。

Yjs 是專門為在 web 上構建協同應用程序而設計的CRDT。

CRDT 包含以下兩種:

  • CmRDT:基于操作的 CRDT,OP-based-CRDT
  • CvRDT:基于狀態的 CRDT,State-based CRDT

基于狀態的 CRDT 更容易設計和實現,每個 CRDT 的整個狀態最終都必須傳輸給其他每個副本,每個副本之間通過同步全量狀態達到最終一致狀態,這可能開銷很大;

而基于操作的 CRDT 只傳輸更新操作,各副本之間通過同步操作來達到最終一致狀態,通常很小。

穿插一個小概念:

向量時鐘(Vector Clock),它是一種在分布式系統中用于記錄事件順序的時間戳機制。它的主要目的是在分布式環境中實現事件的并發控制和一致性。

向量時鐘的基本思想是為系統中的每個節點維護一個向量,其中每個分量對應一個節點,用于記錄該節點的事件發生次數。當一個節點發生事件時,它會增加自己分量的值。向量時鐘的關鍵是在不同節點之間傳遞這些向量,并在合并時確保一致性。

目前協同算法底層都會采用向量時鐘的模式來設計操作算法。

插曲(互斥鎖(Mutex)原理和代碼實現)

先上代碼:

const createMutex = () => {
    let token = true
    return (f, g) => {
        if (token) {
            token = false
            try {
                f()
            } finally {
                token = true
            }
        } else if (g !== undefined) {
            g()
        }
    }
}

它用于創建一個互斥鎖(Mutex)。互斥鎖是一種用于控制資源訪問的機制,確保在任何給定的時間只有一個線程(在這里可以理解為一個函數調用)可以訪問被保護的資源或代碼塊。

下面是對代碼中每個部分的解釋:

  • let token = true:創建一個名為token的變量,并將其初始化為true。token用于表示互斥鎖的狀態。
  • return (f, g) => { ... }:返回一個箭頭函數,該函數接受兩個參數f和g。
  • if (token) { ... }:如果token為true,表示互斥鎖可用。
  • token = false:將token設置為false,表示當前函數獲取了互斥鎖。
  • try { f() } finally { token = true }:在try塊中執行傳入的函數f。如果在執行f的過程中發生異常,會跳轉到finally塊中。在finally塊中,將token重新設置為true,表示釋放互斥鎖。
  • else if (g !== undefined) { g() }:如果token為false,表示互斥鎖已被其他函數獲取。如果同時還傳遞了第二個參數g,則執行g函數。

通過這種方式,createMutex 函數創建了一個簡單的互斥鎖機制。只有在互斥鎖可用時,才能執行f函數。如果互斥鎖已被其他函數獲取,將跳過f函數的執行,并在可能的情況下執行g函數。

這種互斥鎖的實現通常用于在多線程或異步環境中確保對共享資源的安全訪問。

yjs協同框架使用

Yjs 本身是一個數據結構,原理是:當多人協作時,對于文檔內容修改,通過中間層將文檔數據轉換成 CRDT 數據;通過 CRDT 進行數據數據更新這種增量的同步,通過中間層將 CRDT 的數據轉換成文檔數據,另一個協作方就能看到對方內容的更新。

中間內容的更新是基于 Yjs 數據結構進行的,沖突處理等核心都是 Yjs 承擔的,通信基于 websocket 或 webrtc,所以我們只需要簡單的使用就可以實現多人協同的應用。

下面是我總結的一個結構:

Yjs 基于數據結構層面處理沖突,比 OT 更加穩健,對復雜網絡的適應性更強。網絡延時或離線編輯對數據結構來說,處理沒有任何差異。

我總結了一下它的幾個核心特點:

  • 協同列表及光標位置

Yjs 提供的 Awareness(意識)模塊,名如其意,讓協作者能夠意識到其他人的位置在哪,有效避免沖突可能性。

  • 離線編輯

基于 CRDT 的內容合并,天然支持離線編輯,瀏覽器端做本地化存儲。

  • 版本歷史支持

Yjs 自身提供了快照機制,保存歷史版本不用保存全量數據,只是基于 Yjs 打一個快照,后續基于快照恢復歷史版本。

  • 系統編輯人數上限

上限人數很高,可支持很多人同時編輯。

目前主流的 figma 也是采用的 CRDT 開發協同編輯功能。

yjs使用

以上我根據自己的理解整理了一下yjs的核心模塊。接下來我以數組結構為例子給大家介紹一下它的用法:

import * as Y from 'yjs'

const ydoc = new Y.Doc()

// 1: 定義一個類型為數組的共享數據結構
const yarray = ydoc.getArray('my doc') 


// 2. 向數組中插入數據,在第一個位置插入3條數據
yarray.insert(0, [1, 2, 3]) 
// 3. 在第二個位置刪除一條數據
yarray.delete(1, 1)
// 4. 獲取可用的結果
yarray.toArray() // => [1, 3]

// 5. 監聽數據變化,執行操作
yarray.observeDeep((event) => {
  console.log(event)
})

// 將連續的操作合并到transact 中
ydoc.transact(() => {
  yarray.insert(1, ['a', 'b'])
  yarray.delete(2, 2) // deletes 'b' and 2
}) // => [{ retain: 1 }, { insert: ['a'] }, { delete: 1 }]

transact方法用于執行事務操作。事務是共享文檔上的一系列更改,這些更改會在一個事務中進行處理,以保證數據的一致性和正確性。每個事務都會觸發Observer調用和update事件,我們可以在這些事件中進行相應的處理。

通過將更改捆綁到單個事務中,可以減少事件調用的次數,并確保數據的一致性。在事務中,我們可以進行多種操作,如插入、刪除、修改等。

yjs多人協同案例

責任編輯:姜華 來源: 趣談前端
相關推薦

2015-08-20 10:06:36

可視化

2023-08-06 06:55:29

數字可視化物聯網

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2017-02-23 09:42:53

大數據數據可視化技術誤區

2020-12-22 14:14:25

大數據數據可視化

2025-10-10 07:00:00

Python數據可視化數據分析

2025-09-18 12:28:22

2024-08-20 18:16:49

數據可視化Python

2019-12-18 14:40:09

數據可視化后端技術Python

2014-08-19 10:47:11

數據可視化大數據

2017-10-14 13:54:26

數據可視化數據信息可視化

2009-04-21 14:26:41

可視化監控IT管理摩卡

2022-08-26 09:15:58

Python可視化plotly

2020-09-07 12:42:18

表單可視化開源

2025-04-01 08:30:00

Plotly數據可視化數據分析

2024-03-13 00:00:01

可視化技術氣泡圖

2016-07-29 13:22:09

2015-08-19 17:27:11

企業網D1Net

2018-10-16 15:12:48

2018-10-18 11:03:06

點贊
收藏

51CTO技術棧公眾號

国产一区二区三区18| 亚洲二区视频在线| 国产专区欧美专区| 欧美日韩免费做爰视频| 欧美人妖视频| 色婷婷综合视频在线观看| youjizz.com亚洲| 好吊视频一区二区三区| 丝袜美腿亚洲色图| 美女视频久久黄| 日本高清www| 日韩精品视频中文字幕| 日韩欧美中文在线| 成人午夜免费剧场| 国产视频第一区| 国产高清视频一区| 国产精品黄视频| 日韩av一区二区在线播放| 欧美丰满老妇| 亚洲欧洲偷拍精品| 熟女人妻一区二区三区免费看| 香蕉成人影院| 第一福利永久视频精品| 国内精品国产三级国产99| а√天堂中文在线资源bt在线| 风间由美性色一区二区三区| 国产精品一区二区三区毛片淫片| 日韩av电影网址| 欧美精品午夜| 久久精品视频导航| 一级黄色片网址| 天堂av一区二区三区在线播放| 欧美一区二区二区| 91看片在线免费观看| 五月天av在线| 婷婷开心激情综合| 可以看毛片的网址| 午夜成年人在线免费视频| 国产精品乱码久久久久久| 久久青青草综合| 好吊色视频一区二区| 国产精品99久久久| 国产免费一区二区三区在线能观看| 精品美女久久久久| 亚洲精品四区| 韩剧1988免费观看全集| 久久精品人妻一区二区三区| 欧美一区影院| 欧美乱大交xxxxx| 放荡的美妇在线播放| 51精产品一区一区三区| 久久久91精品国产| 国产日韩欧美在线观看视频| 亚洲成av人片乱码色午夜| 久久精品最新地址| 亚洲色婷婷一区二区三区| 亚洲人metart人体| 九九热这里只有精品6| 欧美成人国产精品高潮| 国产精品videossex久久发布| 欧美成人全部免费| 久久午夜无码鲁丝片| 韩国在线视频一区| 久久久在线视频| 国产精品suv一区二区三区| 午夜在线a亚洲v天堂网2018| 国产91在线视频| 中文在线免费看视频| 激情综合亚洲精品| 99精彩视频在线观看免费| 黄色av中文字幕| 99久久久国产精品免费蜜臀| 欧美国产二区| 日本中文字幕电影在线免费观看| 自拍av一区二区三区| 日韩精品第1页| 成人免费图片免费观看| 欧美午夜电影在线| 小泽玛利亚视频在线观看| 9999精品| 亚洲国语精品自产拍在线观看| 中国毛片在线观看| 久久免费大视频| 久久久久中文字幕2018| 国产一区二区视频免费| 激情久久五月天| 国产视频不卡| 91大神xh98hx在线播放| 一区二区三区免费在线观看| 浮妇高潮喷白浆视频| 国产91在线精品| 精品国产伦一区二区三区观看方式| 性久久久久久久久久久| 欧美色女视频| 欧美激情免费在线| 一区二区乱子伦在线播放| 国产伦精一区二区三区| 国产精品美女诱惑| 99视频在线观看地址| 亚洲一区二区三区四区在线免费观看 | 久久午夜羞羞影院免费观看| 亚洲精品一品区二品区三品区| 调教一区二区| 欧美性生活久久| 性色av蜜臀av浪潮av老女人| 精品久久美女| 午夜精品久久久久久99热| 亚洲视频一区在线播放| 不卡区在线中文字幕| 亚洲一卡二卡三卡四卡无卡网站在线看| 日本在线视频中文有码| 欧美午夜寂寞影院| 亚洲综合自拍网| 午夜精品网站| 国产美女精品视频| 韩国福利在线| 亚洲444eee在线观看| 国产永久免费网站| 国产精品一线天粉嫩av| 午夜精品福利视频| 亚洲第一视频在线| 中文字幕一区二区三区精华液 | www.国产毛片| 成人美女视频在线看| 特级毛片在线免费观看| 国产在线|日韩| 精品亚洲国产成av人片传媒| 欧美精品99久久久| 国产精品主播直播| 自拍偷拍99| 欧美国产日韩电影| 亚洲欧美日韩视频一区| 成人免费看片98欧美| 成人精品一区二区三区四区 | 最新国产乱人伦偷精品免费网站| 91久久精品美女高潮| 91在线视频| 日本精品视频一区二区| 波多野结衣福利| 国产日韩1区| 国产精品一区二区三区免费| 污视频免费在线观看| 欧美一区日韩一区| 婷婷伊人五月天| 国产在线播放一区三区四| 伊人久久婷婷色综合98网| 成人在线高清| 自拍偷拍亚洲在线| 91丨porny丨在线中文 | 中文字幕第66页| 五月精品视频| 99r国产精品视频| 在线观看操人| 精品国产乱码久久久久久1区2区 | 日韩电影在线一区二区| 日韩在线三级| 先锋影音一区二区| 久久国产天堂福利天堂| www.热久久| 亚洲国产成人va在线观看天堂| 黄色激情在线观看| 99在线精品视频在线观看| 精品一区二区三区视频日产| 成人一区福利| 在线看日韩av| 国产成人毛毛毛片| 午夜免费久久看| 中文幕无线码中文字蜜桃| 青娱乐精品视频| 影音先锋男人资源在线| 国产人成一区二区三区影院| av在线无限看| 天天天综合网| 成人精品水蜜桃| 久久青草伊人| 中文字幕国产精品| 北条麻妃一二三区| 欧美日韩另类视频| 殴美一级黄色片| 黄色在线免费| 国产午夜精品一区二区三区视频 | 免费精品在线视频| 国产麻豆精品久久一二三| 亚洲国产精品无码观看久久| 国产欧美高清视频在线| 成人情趣片在线观看免费| 都市激情久久综合| 亚洲欧美在线一区| 国产免费福利视频| 欧美性xxxxhd| 岛国毛片在线观看| 国产亚洲一二三区| 日韩av成人网| 免费不卡在线视频| 人妻av中文系列| 欧美成人直播| 久久大片网站| 久久免费精品| 国产精品久久久久久av福利软件| 在线视频国产区| 亚洲天堂色网站| 国产 日韩 欧美 精品| 欧美午夜理伦三级在线观看| 欧美日韩偷拍视频| 国产精品免费观看视频| 亚洲啪av永久无码精品放毛片 | 久久av一区二区三| 奇米精品一区二区三区四区| 97在线国产视频| 国产精品久久久久一区二区三区厕所 | 欧美韩国理论所午夜片917电影| 日韩大片b站免费观看直播| 欧美日韩国产bt| 日韩不卡在线播放| 亚洲一区二区三区三| 狂野欧美性猛交| 久久久一区二区| 久久久久99人妻一区二区三区| 日本va欧美va精品发布| 精品无码国模私拍视频| 国产精品精品国产一区二区| 欧洲视频一区二区三区| 日韩视频在线直播| 成人精品久久av网站| 999福利在线视频| 欧美成人一区二区三区电影| 天堂中文8资源在线8| 亚洲欧美中文日韩在线v日本| 黄色av网站免费在线观看| 日韩一区和二区| 国产精品久久无码一三区| 在线观看网站黄不卡| 草久视频在线观看| 亚洲福利一区二区| 精品少妇爆乳无码av无码专区| 亚洲欧美中日韩| 可以免费看av的网址| 国产亲近乱来精品视频| 丰腴饱满的极品熟妇| 91网址在线看| 久久亚洲AV成人无码国产野外| 国产乱人伦精品一区二区在线观看| 久久综合伊人77777麻豆最新章节| 亚洲福利精品| 极品美女扒开粉嫩小泬| 99国产一区| 九一国产精品视频| 亚洲永久视频| 波多野结衣家庭教师视频| 国产一区二区你懂的| 17c丨国产丨精品视频| 国产精品v日韩精品v欧美精品网站| 久久久久福利视频| 韩国欧美一区| 无码精品a∨在线观看中文| 亚洲精品男同| 88av.com| 激情综合网天天干| 日本中文字幕精品| 丁香激情综合国产| 亚洲欧美在线不卡| 久久中文字幕电影| 亚洲第一综合网| **性色生活片久久毛片| 九九视频免费在线观看| 亚洲福中文字幕伊人影院| 欧美精品二区三区| 91黄色免费观看| 一二区在线观看| 欧美成人激情免费网| 日本精品一二区| 亚洲区一区二区| 蜜桃视频网站在线观看| 欧美肥臀大乳一区二区免费视频| 国产高潮在线| 国产成人精品视频在线| av在线成人| 国产综合第一页| 欧美日韩在线播放视频| 日韩第一页在线观看| 亚洲国产免费看| 搡女人真爽免费午夜网站| 国产一区999| 国内精品久久99人妻无码| 国产精品人成在线观看免费| 久草视频在线免费看| 色天使久久综合网天天| 一区二区三区免费在线视频| 亚洲国产成人一区| 在线免费看黄| 97国产精品视频人人做人人爱| 欧美日韩国产网站| 高清国语自产拍免费一区二区三区| 国产一区二区观看| 久久久久久久久久伊人| 天堂久久一区二区三区| 国产精品一级无码| 中文字幕的久久| 久久久久久久黄色片| 欧美一级日韩免费不卡| 裸体xxxx视频在线| 欧美国产日韩一区| 国产欧美自拍| 精品免费视频123区| 91高清一区| www.超碰com| 99精品视频一区二区三区| 91嫩草丨国产丨精品| 在线视频欧美精品| 天天射天天色天天干| 欧美成人精品在线播放| 亚洲va中文在线播放免费| 国产精品日韩欧美一区二区三区| 成人一二三区| 六月丁香婷婷在线| 成av人片一区二区| 成人在线观看免费完整| 在线这里只有精品| 深夜影院在线观看| 欧美国产极速在线| 91成人精品观看| 天堂资源在线亚洲视频| 亚洲免费网站| 性猛交╳xxx乱大交| 亚洲人xxxx| 一本色道久久综合精品婷婷| 国产视频一区在线| sm在线播放| 国产精品一区免费观看| 欧美精品97| 国产探花一区二区三区| 亚洲视频在线一区二区| 一区二区小视频| 国产一区二区精品丝袜| 亚洲人成午夜免电影费观看| 国产一区二区三区色淫影院 | 亚洲人成在线观看一区二区| 成人午夜精品视频| 亚洲视频在线观看视频| sese综合| 欧洲久久久久久| 老色鬼久久亚洲一区二区| 久久精品老司机| 狠狠做深爱婷婷久久综合一区| 蜜臀av中文字幕| 国语自产精品视频在免费| 国产一区福利| 免费国产黄色网址| 99国产精品久| 91国产丝袜播放在线| 精品视频久久久久久久| 亚洲天堂手机| 日韩精品伦理第一区| 爽好久久久欧美精品| 能直接看的av| 欧美美女一区二区在线观看| 美女隐私在线观看| 亚洲综合中文字幕68页| 影音先锋中文字幕一区| 欲求不满的岳中文字幕| 色综合久久久久久久久久久| 国产小视频免费在线网址| 国产久一一精品| 久久久久久久久久久9不雅视频| 亚洲欧美日韩一二三区| 亚洲一级电影视频| 无码精品视频一区二区三区 | 做爰无遮挡三级| 日韩视频免费在线| 6080成人| 能在线观看的av| 国产精品丝袜黑色高跟| japanese国产| **欧美日韩vr在线| 色欧美自拍视频| 亚洲精品鲁一鲁一区二区三区| 亚洲1区2区3区视频| 成人在线免费公开观看视频| 成人欧美在线视频| 香蕉成人久久| 登山的目的在线| 亚洲精品福利免费在线观看| 国产极品久久久久久久久波多结野 | 免费观看黄网站| 欧美日韩中文字幕在线视频| 91精品专区| 国产精品三区在线| 秋霞午夜鲁丝一区二区老狼| 黄色一级视频免费观看| 亚洲精品自拍第一页| 婷婷精品久久久久久久久久不卡| aa视频在线播放| 综合久久综合久久| 水中色av综合| 亚洲综合国产精品| 久久综合导航| 久久久久久久久久久久久久久久久| 亚洲丝袜一区在线| 成人搞黄视频| 亚洲欧美偷拍另类|