一、 引言:SpreadJS 协同插件的基础能力与核心价值
在现代企业级应用中,多用户并发编辑已成为提升协同效率的基础设施。回顾 SpreadJS 协同插件的核心能力,其底层基于 WebSocket 通信与 Operational Transformation (OT) / CRDT 冲突消解算法,允许多个用户在浏览器中实时、安全地编辑同一个电子表格。涵盖的操作不仅限于单元格数值,还包括样式、复杂公式以及浮动对象等。
这种协同架构为企业带来了直观的业务价值:
- 打破数据孤岛: 彻底告别传统模式下文件反复拷贝传输的痛点,在系统层面实现绝对的"单一数据源" (Single Source of Truth)。
- 极致的办公体验: 为 Web 业务系统赋能类似 Google Sheets 或 Excel Online 的实时并发编辑体验,在财务盘点、在线考试、多人排班等高频互动场景中极大地提升了生产力。

面临的全新挑战:
此前的协同机制主要聚焦于传统的"非结构化表格"视图(即基于坐标系网格的 Worksheet)。然而,随着现代 Web 应用对"海量结构化数据"展示与交互的需求激增,TableSheet 与 Data Manager 作为承载复杂关系映射、多维视图配置的核心组件,其协同改造成为了一座亟待攻克的技术高地。结构化数据的协同不仅涉及单元格的值变化,更牵扯到底层 Schema 变更、关系网格重组以及海量数据同步的性能瓶颈。
二、 核心破局:V19.1 引入 TableSheet 与 Data Manager 的协同增强
在 V19.1 版本中,SpreadJS 正式将协同能力的边界拓展到了 TableSheet 与其底层的 Data Manager。这绝非简单的 UI 状态广播,而是底层数据流转架构的深度整合。
针对结构化数据的复杂性,SpreadJS 提供了两大核心协同场景的精准破局:
- 场景一: 针对外部接入数据(Remote Data)的"配置级"协同。
- 场景二: 针对本地注入数据(Local Data)的"全量"协同。

三、 架构解密(一):"配置协同"策略 (Configuration Collaboration)
当企业应用对接外部 REST API 或 GraphQL 接口时,数据的主控权通常在后端的业务数据库。如果在前端盲目进行全量数据的协同同步,极易引发严重的数据一致性灾难。
策略核心:只协同配置,不触碰外部原始数据。
SpreadJS 采用了精妙的"配置协同" (Configuration Collaboration) 模型,有意在协同广播中排除了外部管理的数据集。这意味着在不妥协外部数据主权和控制力的情况下,开发团队依然能够为用户提供实时、高性能的共创体验。
具体支持的协同维度包含所有配置级别的操作:
- Sheet 级别: 工作表的新增、删除、可见性切换等。
- 数据模型级别: 数据表 (Tables) 的定义、表关系 (Relationships) 的映射重组、主键等元数据配置。
- 视图级别 (Views): 包括视图面板中的排序 (Sort)、过滤 (Filter)、分组 (Group) 以及冻结列等配置状态的实时多端同步。
优雅的冲突处理与 Undo/Redo 机制:
在这种模型下,系统能够确保在多用户场景下拥有一致的文档快照。当本地客户端接收到来自服务端的其他用户操作指令时,引擎会智能清理本地的撤销/重做 (Undo/Redo) 栈,以防止因状态时序错乱而导致的数据损坏或冲突崩溃。
四、 架构解密(二):Local Data 本地数据的深度协同
对于不依赖外部 API 且直接在前端内存中初始化的本地结构化数据,SpreadJS V19.1 释放了强悍的全量实时协作能力。
- 全方位的数据变动同步: 支持跨用户同步对底层记录、固定行 (pinned rows) 进行的增加、删除与修改。
- 列与表结构动态修改: 能够实时响应并同步数据列的变动以及整个 Schema 结构的修改。
- 树形层级结构 (Hierarchy) 协同: 在复杂的树形布局下,支持协同同步记录的层级变化,包括"上移/下移"(基于底层指定的
rowOrder字段)以及层级的"升级/降级"。 - 性能优化之"数据分片" (Fragments): 面对庞大的本地数据集,SpreadJS 在底层采用了高效的片段存储技术(storing large datasets as fragments),显著降低了数据同步过程中的网络传输负载与前端渲染压力。
- 格式支持: 当前版本中,
JSON和columnJSON格式的本地数据均享有最全面、无缝的协同支持。

五、 开发指南与最佳实践 (Limitations & Best Practices)
在享受 TableSheet 与 Data Manager 带来的结构化协同红利时,开发者需明确当前版本的特性边界与架构限制,以避免在复杂的业务集成中踩坑:
- 数据源接入限制: 在配置协同模式下,
dataSourceOption中的remote选项暂不支持被赋予自定义的 Function(因为原生 JavaScript 函数无法被安全序列化并在多端间进行 WebSocket 传输)。同理,当HierarchyOption配置为Custom时,自定义的树形解析函数也处于协同支持的边界之外。 - 特定格式的数据回写限制: 虽然本地数据支持全量协同,但如果初始化的本地数据源为 CSV 或 XML 格式,运行时的数据变动暂不支持直接反向写回到本地文件中,因此这类格式的数据变动目前无法参与协同广播。
- UI 状态的物理隔离: 为了保证多个协作者在同一张巨型 TableSheet 中享有独立的沉浸式阅览体验,用户的光标位置、单元格选择区域 (Selection) 是在本地严格隔离的。这些交互状态不会在网络间广播,避免了因他人操作而导致自身视窗剧烈抖动的干扰。
六、 总结与展望
从单个单元格数值的 OT 协同,进化到对具备关系型数据库特征的 Data Manager 及其多维视图的结构化协同,SpreadJS V19.1 完成了底层协同引擎的一次架构跃迁。这一突破让大型项目管理看板、复杂甘特图 (GanttSheet) 及多维数据分析视图真正具备了"多端同频"的企业级协同底座。
体验与升级:
您可以查阅官方的 Collaboration Data Manager 与 Collaboration TableSheet 文档获取底层 API 集成的详细技术规范,或直接访问官网在线体验协同服务的实际运行效果。