From 746fcb07ffbf00cfe58952ec4f47a62c5e003ff5 Mon Sep 17 00:00:00 2001 From: cqh963852 Date: Sat, 17 Dec 2022 18:41:11 +0800 Subject: [PATCH] feat: update docs --- docs/web/CAP.png | Bin 0 -> 49138 bytes docs/web/协同编程探索.mm.md | 138 ++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 docs/web/CAP.png create mode 100644 docs/web/协同编程探索.mm.md diff --git a/docs/web/CAP.png b/docs/web/CAP.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4f47168e679d7187ec68dc922502782426a8c8 GIT binary patch literal 49138 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 literal 0 HcmV?d00001 diff --git a/docs/web/协同编程探索.mm.md b/docs/web/协同编程探索.mm.md new file mode 100644 index 0000000..c6eb966 --- /dev/null +++ b/docs/web/协同编程探索.mm.md @@ -0,0 +1,138 @@ +--- +sidebar_position: 6 +--- + +# 面向前端的协同编程探索 + +低代码,无代码等概念已经不再新鲜。同时协同编程也会被经常提到。 + +虽然协同编程只是一个组合词 `协同` + `编程`,但是要做的事情远没有这么简单。 + +> 协同编程 +> +> - 编辑 —— 协同编辑 +> - 构建 —— 预置的构建方案 +> - 运行 —— 在目标环境运行 + +## 编辑 + +编辑在传统的编辑器的基础上要求更高,需要协同编辑。 + +- 离线编辑 + +### 编辑器 + +- prosemirror +- codemirror +- monaco-editor + +### 协同算法 + +- OT + - @codemirror/collab +- CRDT + - yjs + - automerge + +相关文章 + +偏向数学理论 + +https://www.zxch3n.com/crdt-intro/design-crdt/ + +偏向实现细节 + +https://zhuanlan.zhihu.com/p/265074361 + +### 多窗口库 + +- https://github.com/caplin/FlexLayout +- https://github.com/ticlo/rc-dock +- https://github.com/golden-layout/golden-layout +- https://github.com/nomcopter/react-mosaic +- https://github.com/idealjs/layout-manager + +## 构建 + +### 构建工具 + +- esbuild +- swc +- webpack https://github.com/webpack/playground 已过时 + +### 文件系统 + +- 虚拟文件系统 + - memfs + - memory + - filer + - indexdb + - memory + - unionfs +- 文件系统 + - FileSystem + - unionfs + +## 运行 + +- dynamic import + +- IIFE (Immediately Invoked Function Expression) + - iframe + +使用了 `构建` + `运行` 的平台 + +- codesandbox +- codepen +- stackblitz + + +## 既要也要的矛盾 + +- 离线优先 与 CAP + +传统分布式软件中分区容错性被看的很重要。离线优先也可以被视作分区容错的子集。 + +但是离线优先的设计带来了无法在协同编程中解决的问题。 + +### 场景 + +A B C 三人,P2P 协同编程。 + +存在一段错误的代码 + +```js +let = "A" + +username = "C" +``` + +当三人同时开始修复此问题时,A出现离线情况。 + +B C 二人协同修复得到的结果 + +```js +let username = "A" + +username = "C" +``` + +A 离线修复结果 + +```js +let username = "A" + +username = "C" +``` + +看上去 A 与 B C 是一致的。但是在 CRDT 与 OT 算法中,并不是。最终 A 恢复连接,得到的结果是 + +```js +let usernameusername = "A" + +username = "C" +``` + +对于协同编程来说,协同的好处是规避冲突。但是这种场景下,冲突被放大。 + +而这种情况在 git 的方案内,不会发生冲突。 \ No newline at end of file