钉钉表格 — 从 0 到 1 打造 在线 Excel
如果无法正常显示,请先停止浏览器的去广告插件。
1. 谢光磊(叶斋)
阿里巴巴前端技术专家
钉钉表格 — 从 0 到 1 打造
在线 Excel
2. 钉钉表格 — 从零到一打造在线 Excel
谢光磊(叶斋)
钉钉表格 前端架构师
3. 边框样式
排版样式
冻结行列
富文本
数值格式
行列自适应
锁定区域
数据条
历史记录
批注 / 评论
宏 / 批处理
数据透视表
合并单元格
复制粘贴
条件格式
Excel
查找替换
图表
筛选视图
浮动图片
分类汇总
公式计算
组合排序
数据验证
浮动形状
打印
4. Google Sheets
Office 365
Excel
WPS Web
......
钉钉表格
5. 边框样式
排版样式
冻结行列
富文本
数值格式
行列自适应
锁定区域
数据条
历史记录
批注 / 评论
合并单元格
宏 / 批处理
数据透视表
复制粘贴
条件格式 / 样式
钉钉表格
查找替换
图表
筛选视图
浮动图片
分类汇总
公式计算
组合排序
数据验证
浮动形状
打印
6. 钉钉表格
vData
协同引擎
OT调度
内核模型
op + cp
棋盘模型
mData
op + cp
Range Man
公式引擎
表格组件
选区控制 Canvas
单元格控制
vData
行列操作
导入导出
OT协调
控制器
条件格式
api
文字排版
复制/粘贴
......
event
交互处理
props
菜单工具栏
类型编辑器
只读/演示
公式编辑
筛选排序
applyOp
富文本编辑
表格应用
props
待办任务
@人/锁定
7. 可扩展的表格
协同的表格
高性能的表格
8. 可扩展的表格
9. 1
1
1
1
棋盘模型
1
10. 响应:单元格样式
新增的单元格背景设置为红色
特性:公式计算
特性:单元格样式
计算 B1:D3 区域中空单元格的数量
设置背景色为红色
cell.formula=countblank(B1:D3)
cell.style.bgColor=red
响应:公式计算
引用区域由 B1:D3 修改为 B1:D5
响应:合并单元格
合并单元格由 [2,2] 修改为 [3,2]
特性:合并单元格
Range
以 A1 为左上角,合并 2x2 个单元格
cell.merge=[2,2]
注:合并单元格的值存储在左上角单元格(master cell)中
11. RangeMan
Range
集中管理 Range,自动响应行列变化
12. 1
1
1
6
8
1
RangeMan
StyleMan
MergeMan
FormularMan
13. 样式
选区
合并单元格
条件格式
棋盘模型
RangeMan
浮动图表
筛选 / 排序
选区锁定
自动填充
格式刷
14. • 棋盘模型,行列操作。
• 基于 RangeMan 统一管理 Range 模型。
• 基于 Range 模型扩展出大部分功能模块。
15. 协同的表格
16. 协同表格端
本地表格应用
cp
op
cp
保存
data
协同表格服务
协同表格端
op
cp
op
文件系统
协同表格端
17. cp Check Point 全量表格数据
op Operation 单次操作的表达
18. v0 s0 s1 v1
cp op op cp
设置 [0, 1] 的背景色
在第 1 行后添加 1 行
19. T(Op1, Op2)
用户 A
Op1
设置[0,1]的
背景色
逆(Op1) Op2
恢复[0,1]的
背景色 在第1行后
插入一行
Op3
设置[0,2]的
背景色
?
X
服务
Op3
Op2
设置[0,2]的
背景色
在第1行后
插入一行
。
担小
负
端
服务
。
,
率高
简单
回
辑
打
* 逻
下,
同
模协
规
大
*
GOT
用户 B
Op2
在第1行后
插入一行
Op3
设置[0,2]的
背景色
20. T(Op2, Op1)
用户 A
Op4
Op1
在第1行后
插入一行
设置[0,1]的
背景色
T
?
服务
用户 B
Op2
在第1行后
插入一行
Op3
T(Op1, Op2)
设置[0,2]的
背景色
Op2 Op3
在第1行后
插入一行 设置[0,2]的
背景色
辑。
逻
份
行一
COT
运
。。
前端
高
+
更
端
限
同上
* 服务
协
,
打回
需
* 无
21. Op1 Op2
Op1 T(Op1, Op1) T(Op2, Op1)
Op2 T(Op1, Op2) Op3 T(Op1, Op4) Op4 T(Op1, Op5) OpN T(Op1, OpN)
Op3
Op4 OpN T(Op3, Op1) T(Op4, Op1) T(OpN, Op1) T(Op2, Op2) T(Op3, Op2) T(Op4, Op2) T(OpN, Op2) Java
T(Op2, Op3) Rust Op3)
T(Op3, T(Op4, Op3) T(OpN, Op2) Client
Server
JavaScript
T(Op2, Op4)
T(Op2, OpN)
T(Op3, Op4)
T(Op3, OpN)
T(Op4, Op4)
T(Op4, OpN)
T(OpN, Op2)
T(OpN, OpN)
保
如何
障
性
一致
?
22. Client
Rust
Server
JavaScript Java
WASM WASM
WASM
23. • OT (Operation Transform) 是协同算法的关键。
• 上限更高的 COT 调度算法要求 OT 同时运行在两端。
• Rust + WASM 实现 OT,已验证最小闭环。
24. 高性能的表格
25. 高性能: 长时间,高强度使用,不卡顿
卡顿: 往往来自于渲染
渲染: 从 DOM 到 Canvas
26. 钉钉表格
Web 应用
React
Canvas API
DOM API
WebGL API
模型
/ 控制 / 协同 等等
浏览器
表格渲染管线
React
DOM Pipeline
浏览器
上层图形系统(Skia / GDI)
图形系统 / 操作系统
底层图形系统(OpenGL / DirectX)
操作系统
27. 表格渲染管线
网格层
首次绘制
内容层
选区变化
背景层
排版引擎
内容变化
滚动
文本层
装饰层
选区层
合成到表格
主界面
28. 文本层
排版引擎
D1
D1
Worker
D2
D2
C1 D1 E1 C0 D0 E0
C2 D2 E2 C1 D1 E1
C3 D3 E3 C2 D2 E2
buffer canvas 1
main canvas
双缓冲画布渲染
buffer canvas 2
29. 排版引擎
Hey
?
30. Microsoft Excel 是 Microsoft 为使用
Windows 和 Apple Mactintosh 操作系
统的电脑编写的一款电子表格软件。
31. Microsoft Excel 是 Microsoft 为使用
Windows 和 Apple Mactintosh 操作系
统的电脑编写的一款电子表格软件。
32. Microsoft Excel 是 Microsoft 为使用
Windows 和 Apple Mactintosh 操作系
统的电脑编写的一款电子表格软件。
33. • 选择 canvas 渲染表格主界面。
• 分层表格渲染管线,减少重绘。
• 双缓冲画布,支持流畅的滚动。
• 自研排版引擎。
34. COT & GOT
Accumulative
Array
Segmentation
Render Pipeline
Typeset & Layout
RangeMan
Quadtree
钉钉表格
共冶一炉
Web Assembly
Canvas & Offscreen
Canvas
Web Worker
Awesome TypeScript
React + Redux
35. Q&A
欢迎技术交流