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

Figma 在協(xié)同編輯中使用的順序一致性算法: Fractional indexing

開發(fā) 前端
在多人同時操作同層級的多個圖形的順序時,需要保證用戶的意圖能保留,不會被其他用戶的操作覆蓋丟棄,且所有用戶最終的順序是一致的。為解決這個問題,F(xiàn)igma 使用了一種名為 Fractional Indexing 的簡單算法。

大家好,我是前端西瓜哥。

Figma 支持多人協(xié)同,那它是如何做到順序一致性的呢?

在多人同時操作同層級的多個圖形的順序時,需要保證用戶的意圖能保留,不會被其他用戶的操作覆蓋丟棄,且所有用戶最終的順序是一致的。

為解決這個問題,F(xiàn)igma 使用了一種名為 Fractional Indexing 的簡單算法。

算法來自 Figma 前 CTO 的這篇文章:

CRDT: Fractional Indexing

https://madebyevan.com/algos/crdt-fractional-indexing/

Fractional indexing 的原理

Fractional Indexing,直譯的話,是小數(shù)索引。

該算法的原理并不復(fù)雜。

圖形對象會使用 index 屬性表示順序,記錄自己在同級圖形中的位置。

index 的值為 0 到 1 之間的 64 位浮點數(shù),不包括 0 和 1。

出于減少體積的考慮,figma 會丟掉前面的 0.,并把剩余的小數(shù)部分數(shù)字轉(zhuǎn)換成 ASCII 中的可打印字符(共 95個,表達為 95 進制數(shù))。

不能為 0 和 1, 是因為如果給某個圖形設(shè)置了 0 或 1,這個圖形的左側(cè)或右側(cè)添加的圖形的 index 就會超出了 0 到 1 的范圍。

當(dāng)往兩個圖形之間插入新的節(jié)點時,我們會取這兩個圖形 index 的中點。

比如我們要在索引值分別為 0.3 和 0.4 的圖形插入圖形,這個圖形的索引值會取中間值 0.35。

移動圖形同理。

但在實現(xiàn)這個算法的時候,你需要注意兩個問題。

精度問題

首先是精度問題。

說到取中間值,容易聯(lián)想到二分查找。

二分查找效率很高,時間復(fù)雜度是 O(logn),是因為不管數(shù)據(jù)規(guī)模多大,它 每一次查找都會直接將數(shù)據(jù)量減半,給你打骨折。

index 使用的雙浮點數(shù),能表示的二進制小數(shù)部分位數(shù)為 52 位,每次二分就是進行 位右移操作,會用掉一個精度。

假設(shè)我們不斷地往 0.3 到 0.4 的區(qū)間靠近 0.3 的那邊插入新圖形,我們會看到 index 非常快地接近 0.3,最后因為精度用完,再也無法二分。

const getMid = (a, b) => (a + b) / 2;

const left = 0.3
let right = 0.4

for (let i = 0; i <= 50; i++) {
  right = getMid(left, right);
  console.log(right);
}

上面的代碼在 50 次左右就將精度耗盡了。

這種是很極端的場景,一般正常的用戶操作不會出現(xiàn),F(xiàn)igma 并不打算處理這種情況的。

字符串表示法

當(dāng)然精度問題是有辦法解決的,那就是用無限精度的數(shù)據(jù)類型:字符串。

可以看看 David Greenspan 的這篇文章。

https://observablehq.com/@dgreensp/implementing-fractional-indexing

該算法使用 "0" 到 "9" 的字符串表示索引,并通過字典序作為排序依據(jù)。

空字符表示最小值,null 表示最大值。

(1)計算中點會做舍入,盡量不占用更多的位數(shù)。

比如 "3" 和 "6" 的中點是 "5",而不是 "45"。但 "3" 和 “4” 因為太靠近,只能得到 "35"。

(2)如果是空字符,會等價于 "0",如果是 null,等價于 "10"(會比 "9" 大)。

(3)如果有前綴相同部分,取后面不同部分計算中點,再拼回去。

假如兩個相鄰圖形的 index 分別是  "123" 和 "1234"。

我們會取后面不同的部分 ""(表示 0) 和 "4",取中點 "2",然后添加回相同前綴 "123",得到我們需要的新索引 "1232"。

另外,對比 "123" 和 "123004" 時,"123" 要補全后綴零為 "12300"。

我們來看看效果。

使用這種方式,對 "3" 和 "4" 進行 1000 次的二分,因為突破了精度限制,我們會得到非常非常長的字符串。

很長,通常通過編碼處理精簡,這里就不過多介紹了。

另外還有人基于 David Greenspan 的文章,實現(xiàn)了一個 NPM 庫,感興趣可以看看。

https://github.com/rocicorp/fractional-indexing。

沖突問題

最后是沖突問題。

如果耿直地計算中點,那當(dāng)多個客戶的都同時往兩個節(jié)點之間插入圖形,同步后就會出現(xiàn)多個圖形的 index 相同的場景。

對此,我們會 在中間值的基礎(chǔ)上,加上一個隨機的偏移值,這樣多個客戶端之間的沖突概率就非常的低。

但非常極端的情況下,沖突還是可能發(fā)生的,這種情況下就需要作為 中心權(quán)威的服務(wù)端去做修正 了,進行微小偏移,且和其他索引值不沖突。

結(jié)尾

Fractional Indexing 的優(yōu)點是實現(xiàn)簡單,不需要 CRDT 那種墓碑機制,要保留大量無用的元數(shù)據(jù)。

缺點是極端場景 index 的長度很長,有精度不夠?qū)е露质〉倪吘増鼍埃捎米址鉀Q),以及對圖形編輯器并無大礙的交錯問題(兩用戶分別輸入 "123" 和 "ABC",同步后可能會得到 "1A2B3C",而不是 "123ABC")。

責(zé)任編輯:姜華 來源: 前端西瓜哥
相關(guān)推薦

2024-03-27 08:09:48

Figma協(xié)同編輯算法

2021-02-05 08:00:48

哈希算法?機器

2025-09-08 07:25:16

2022-03-22 09:54:22

Hash算法

2017-07-25 14:38:56

數(shù)據(jù)庫一致性非鎖定讀一致性鎖定讀

2019-10-11 23:27:19

分布式一致性算法開發(fā)

2020-07-20 08:30:37

算法哈希分布式系統(tǒng)

2021-08-13 07:56:13

Raft算法日志

2020-03-16 11:55:28

PaxosRaft協(xié)議

2022-11-10 07:49:09

hash算法代碼

2021-07-27 08:57:10

算法一致性哈希哈希算法

2016-12-19 18:41:09

哈希算法Java數(shù)據(jù)

2022-12-14 08:23:30

2021-09-18 08:54:19

zookeeper一致性算法CAP

2021-02-02 12:40:50

哈希算法數(shù)據(jù)

2021-02-04 06:30:26

Python編程語言

2018-03-13 08:20:48

區(qū)塊鏈數(shù)據(jù)安全

2023-12-12 08:00:50

節(jié)點哈希算法

2018-07-05 09:41:08

一致性哈希算法

2019-11-01 09:13:37

算法哈希緩存
點贊
收藏

51CTO技術(shù)棧公眾號

中文字幕91视频| 一本久道中文无码字幕av| 亚洲av无码国产精品永久一区 | 日韩国产欧美一区| 中文字幕av资源| 午夜久久tv| 亚洲开心激情网| av免费一区二区| 欧美一级鲁丝片| 国产精品久久久久久久久免费丝袜 | 国产亚洲精品日韩| aaa一级黄色片| 末成年女av片一区二区下载| 国产精品久久看| 国内一区二区三区在线视频| 中文字幕在线观看精品| 在线日韩视频| 中日韩美女免费视频网址在线观看 | 性高潮视频在线观看| 狠狠综合久久| 日韩最新免费不卡| 日本高清www| 日韩欧美中文字幕在线视频 | 久久久久久伊人| 欧美老女人性生活视频| 久久97精品| 日韩精品一区二区三区视频播放 | 国产麻豆一区| 欧美性69xxxx肥| 免费一级淫片aaa片毛片a级| 亚洲天天影视| 日本一区二区三区国色天香 | 亚洲成精国产精品女| 久久久国产精华液999999| 欧美日韩激情视频一区二区三区| 国产成人免费视频| 成人免费淫片aa视频免费| 日韩视频在线观看一区| 激情综合中文娱乐网| 毛片精品免费在线观看| 女人裸体性做爰全过| 精品不卡一区| 天美星空大象mv在线观看视频| 91免费公开视频| 自拍自偷一区二区三区| 亚洲国产小视频| 亚洲少妇一区二区| 免费观看性欧美大片无片| 欧美日韩高清在线播放| 亚洲一级免费观看| 外国电影一区二区| 欧洲视频一区二区| 午夜精品在线免费观看| 欧美日韩亚洲国产| 在线观看日韩高清av| 99福利在线观看| 欧美成人资源| 在线观看日韩国产| 久久人人爽av| 国产不卡精品| 日韩精品专区在线影院观看| 岛国大片在线免费观看| 99国产精品久久一区二区三区| 日韩区在线观看| 人妻av一区二区| 日韩在线影视| 亚洲小视频在线| 亚洲av熟女国产一区二区性色| 成人中文视频| 久久这里只有精品99| 欧美丰满艳妇bbwbbw| 国产一区二区三区自拍| 91精品国产免费久久久久久 | 91免费版网站入口| 草草视频在线播放| 91女厕偷拍女厕偷拍高清| 日本高清不卡一区二区三| 91在线视频免费看| 亚洲免费av网站| 2019日韩中文字幕mv| 91精品产国品一二三产区| 在线看一区二区| 精品综合久久久久| 成人影院中文字幕| 亚洲欧美国产精品va在线观看| 日本爱爱爱视频| 欧美在线影院| 91成人精品网站| a片在线免费观看| 国产伦精品一区二区三区免费迷 | 国产精品一区二区三| www.久久久久久久久久| 91老师国产黑色丝袜在线| 亚洲国产日韩综合一区| 日韩电影免费观看| 色偷偷一区二区三区| 久久久福利影院| 岳的好大精品一区二区三区| 久久久精品一区二区三区| 日韩欧美激情视频| 老司机午夜精品99久久| 久久99精品久久久久久秒播放器| 91精彩视频在线播放| 亚洲国产欧美在线| 手机视频在线观看| 秋霞蜜臀av久久电影网免费| 日韩在线视频中文字幕| 日韩色图在线观看| 国产精品一二三四区| 日韩区国产区| 欧美少妇精品| 日韩欧美亚洲一区二区| 免费黄色在线网址| 亚洲另类黄色| 99re视频在线播放| 午夜激情在线观看| 日韩欧美在线网址| 天天av天天操| 日韩一区亚洲二区| 欧美最猛性xxxx| 亚洲第一精品网站| 一区在线中文字幕| 天堂中文视频在线| 五月天亚洲色图| 久久久免费高清电视剧观看| 国产精品爽爽久久久久久| www久久精品| cao在线观看| 亚洲国产欧美在线观看| 日韩中文字幕在线| 国产精品第六页| 久久免费视频色| 国产网站免费在线观看| 91麻豆精品激情在线观看最新| 北条麻妃一区二区三区中文字幕| 中文字幕一区二区三区四区欧美| 99久久亚洲一区二区三区青草 | 国产日韩综合| 国产精品成人一区二区三区 | 亚洲摸摸操操av| 91女神在线观看| 色乱码一区二区三区网站| 日本亚洲欧洲色α| 黄色片视频在线观看| 都市激情亚洲色图| 97人妻精品一区二区三区免| 亚洲看片一区| 久久五月天婷婷| 大胆人体一区| 亚洲图片欧美午夜| 亚洲色成人www永久网站| 久久久精品免费免费| 国内外成人免费激情视频| 一本久久青青| 国产精品欧美一区二区| 久草免费在线| 日韩一区二区免费电影| 青草草在线视频| 东方欧美亚洲色图在线| 日本福利视频一区| 日韩av三区| 国产精品久久久久久久久久久新郎| 男人的天堂在线免费视频| 欧美日韩在线另类| 亚洲AV无码成人精品区明星换面| 日本欧美久久久久免费播放网| 性刺激综合网| 电影91久久久| 欧美多人爱爱视频网站| 日本激情一区二区三区| 色综合久久久久综合体| 少妇人妻好深好紧精品无码| 久久er99热精品一区二区| 日韩国产精品毛片| 澳门成人av| 国产精品1234| 黄色网址在线免费| 亚洲国产小视频| 中文字幕一区二区人妻| 亚洲精品视频一区| 野花社区视频在线观看| 蜜桃久久精品一区二区| 中文精品无码中文字幕无码专区| 欧美大奶一区二区| 国产精自产拍久久久久久| 青青青草视频在线| 亚洲午夜精品久久久久久久久久久久| 在线免费观看一级片| 亚洲一线二线三线久久久| xxxxx在线观看| 国产乱国产乱300精品| 国产超级av在线| 久久久久国产| 欧美另类一区| 免费一区二区三区在线视频| 日韩av成人在线| av在线app| 国产亚洲一区二区精品| 国产成人精品无码高潮| 日本韩国一区二区三区| 国产1区2区3区4区| 国产欧美一区二区三区在线看蜜臀 | 中文字幕精品在线视频| 神马久久久久久久久久| 欧美精品日韩综合在线| 全部毛片永久免费看| 亚洲男同性恋视频| 中文字幕欧美激情极品| 99久久精品免费看| 中文字幕一二三| 奇米色一区二区三区四区| 精品久久一二三| 91精品国产91久久久久久黑人| 欧美人xxxxx| 成人在线视频你懂的| 国产欧美中文字幕| 国产综合色区在线观看| 91国产视频在线| 丝袜美女在线观看| 久久亚洲精品成人| av大片在线播放| 亚洲精品在线观看www| 丰满肥臀噗嗤啊x99av| 欧美日本乱大交xxxxx| 在线观看 亚洲| 婷婷夜色潮精品综合在线| 国产极品国产极品| 亚洲色图在线视频| 国产美女网站视频| 中文字幕免费观看一区| 三上悠亚ssⅰn939无码播放 | 一级片黄色录像| 久久精品人人做| 人妻无码一区二区三区| 99国产欧美另类久久久精品| 成人啪啪18免费游戏链接| 国产一区二区三区不卡在线观看| 欧美一级特黄a| 日韩av不卡一区二区| 亚洲精品乱码久久久久久自慰| 99精品久久久| 成人毛片视频网站| 国产日韩一区| 欧美 国产 小说 另类| 久久精品三级| 男女啪啪网站视频| 日产欧产美韩系列久久99| 黄色免费网址大全| 日韩激情视频网站| www.se五月| 国内精品伊人久久久久av一坑| 视频免费1区二区三区 | 成人a级免费视频| 午夜不卡一区| 亚洲自拍av在线| 97一区二区国产好的精华液| 国产精品免费看一区二区三区| 中文字幕区一区二区三| 国产一区二区在线观看免费播放| 国产精品白丝av嫩草影院| 国产在线视频欧美一区二区三区| 天天躁日日躁狠狠躁欧美| 美媛馆国产精品一区二区| 精品国产精品国产偷麻豆| 亚洲精品一区二区三区蜜桃久| 欧美顶级大胆免费视频| 黄色一级片av| 一区二区亚洲精品| 国产三区在线视频| 轻轻草成人在线| 国产一级免费大片| av电影在线观看不卡| 欧美成人国产精品一区二区| 国产精品久久久久一区二区三区共 | 亚洲av少妇一区二区在线观看| 亚洲第一福利在线观看| 国产在线日本| 久久综合九色九九 | 国产九九精品视频| 中文字幕一区日韩精品| 麻豆精品传媒视频| 久久综合88| 国产资源在线视频| 美女在线一区二区| 美女露出粉嫩尿囗让男人桶| 久久综合九色综合欧美亚洲| 91香蕉国产视频| 婷婷六月综合亚洲| 亚洲天堂视频在线| 亚洲缚视频在线观看| 成年人在线观看| 欧美激情第99页| 成人va天堂| yy111111少妇影院日韩夜片| 国产成人久久| 国产成人免费高清视频| 久久免费黄色| 丰满熟女人妻一区二区三区| 国产日韩欧美麻豆| 欧美日韩中文视频| 欧美浪妇xxxx高跟鞋交| 外国精品视频在线观看| 深夜精品寂寞黄网站在线观看| 国产经典三级在线| 国产欧美一区二区三区视频 | 国产精品白丝av| 一道本在线观看| 香蕉av福利精品导航| 一级黄色片在线| 亚洲日本欧美日韩高观看| 激情图片在线观看高清国产| 国产精品专区h在线观看| 超碰97久久| 中文字幕在线乱| 免费人成精品欧美精品| 美国黄色一级毛片| 亚洲一区二区精品3399| 亚洲一区中文字幕在线| 亚洲男人天堂网站| 成人观看网址| 成人片在线免费看| 亚洲国产精品综合久久久 | 一级性生活视频| 老司机免费视频一区二区| 中文字幕国产专区| 天天综合网 天天综合色| 国产高清在线观看视频| 色综久久综合桃花网| 91精品韩国| 欧美激情第六页| 国产精品久久国产愉拍| 丰满岳乱妇一区二区| 亚洲精品一二三区| 国产精品爽爽久久久久久| 日韩中文字幕久久| 粉嫩av一区二区三区四区五区| 欧美日韩免费观看一区| 亚洲欧美卡通另类91av| 先锋资源av在线| 亚洲福利一区二区三区| 亚洲精品国偷拍自产在线观看蜜桃| 久久福利网址导航| 高清一区二区| 看全色黄大色大片| 国产寡妇亲子伦一区二区| 欧美卡一卡二卡三| 欧美大片日本大片免费观看| 亚洲夜夜综合| 国产精品日本一区二区| 亚洲国产精品一区制服丝袜| 久久精品女同亚洲女同13| 懂色av一区二区三区| 国产视频精选在线| 国产欧美久久久久久| 香蕉综合视频| 麻豆传媒在线看| 午夜伊人狠狠久久| 亚洲 欧美 精品| 国产精品1234| 91久久高清国语自产拍| 性生活在线视频| 午夜精品成人在线视频| 欧美在线观看在线观看| 国产精品视频精品| 91精品综合| 国产十八熟妇av成人一区| 欧美午夜精品久久久久久浪潮 | 玩弄japan白嫩少妇hd| 国产女人aaa级久久久级 | 视色,视色影院,视色影库,视色网| 国产一区二区三区av电影| 国产精品第一页在线观看| 精品亚洲男同gayvideo网站| 亚洲综合av一区二区三区| 自拍偷拍亚洲色图欧美| 成人午夜碰碰视频| 国语对白做受69按摩| 欧美精品一区三区| 色狼人综合干| 爱豆国产剧免费观看大全剧苏畅| 一区二区三区四区不卡在线| 丝袜+亚洲+另类+欧美+变态| 国产日韩精品入口| 亚洲免费播放| 激情高潮到大叫狂喷水| 精品久久五月天| 欧美日韩五码| 免费一级淫片aaa片毛片a级| 久久九九影视网| 成人h动漫精品一区二区无码| 欧美在线视频免费观看| 999国产精品| 中文字幕在线播放视频| 欧美美女一区二区三区| yellow在线观看网址| 黄色a级在线观看| 久久在线免费观看| 丰满人妻一区二区| 国产狼人综合免费视频| 亚洲免费精品|