同构架构(Isomorphic)
Univer 目标是在 浏览器、Node.js、Web Worker 等环境复用同一套核心逻辑(数据、命令、公式),仅将 DOM / Canvas / 网络 差异隔离到适配层与 UI 插件。
1. 设计原则
| 原则 | 做法 |
|---|---|
| 核心无 DOM | 逻辑插件不 document |
| 环境适配 | isBrowser / isNode 分支或注入实现 |
| UI 可选 | Node 只跑公式/导入导出,不挂 Canvas |
2. 环境能力矩阵
| 能力 | 浏览器 | Node | Worker |
|---|---|---|---|
| 命令 + Model | ✓ | ✓ | ✓(常公式) |
| Canvas 渲染 | ✓ | 视方案 | 通常 ✗ |
| 协同 RPC | ✓ | ✓(服务端) | 少见 |
3. Node 场景
- 服务端 解析 xlsx、批量公式、生成 snapshot。
- 无 UI 插件,只
registerPlugin逻辑包。
4. Web Worker
- 公式、大文件解析放 Worker,主线程 postMessage 传递 纯数据(snapshot 片段、计算结果)。
- 避免传递函数或 DOM 引用。
5. 构建与测试
- 多入口打包(browser / node)。
- 单测针对 Command + Model,不启动 Canvas。
6. 总结
同构的关键是 逻辑/UI 插件分离(见 02);写功能前先问「这段能否在无 DOM 环境跑」。