多人协作在线文档的概念,最早由Google Docs带入中国。但实际上,在日常工作中,与团队的其他人进行协作是一种在常见不过的工作方式。

由于工作分工、工作进展的不同,团队内部的信息往往需要及时同步,然而伴随着团队经营规模的不断扩大,在线协同、多人协作,以及软件项目管理等问题将会接踵而至,成为制约企业高效发展的瓶颈。

这些问题,通常表现为:

  1. 跨部门、地区协作不便
  2. 过度依赖文件夹共享的形式,不能确保文档的安全性
  3. 没法纪录和体现职工对文本文档的意见和评价
  4. 文档记录发生变更时,无法及时通知到相关部门和员工
  5. 文档无法在线协同编辑,缺失必要的流程管控
  6. 多人共同编辑一个文档,无法留存修改记录和历史版本

针对上述问题,目前最佳的解决方案是:使用一款可多人在线协同办公的软件或工具。市面上,这类软件有很多,比如国外的Google Docs、Office365,以及国内的腾讯文档、石墨文档、有道云协作等。

本文将不再过多赘述这类成品软件,而是深入协同办公系统的实现原理,从企业IT管理者的角度出发,深入研究多人协作的形式、基础和难点,分析一款开发工具应具备怎样的特点,才是实现多人协作“在线excel”系统的关键。

以下内容,节选自葡萄城公开课《如何实现可多人协作的“在线excel”系统?》,欢迎大家提前预约。

多人协作的形式:历史与发展

多人协作的历史十分悠久,起源于静态的多人协作模式,即每个人先完成自己的工作,然后再进行汇总。

静态的多人协作模式

  • 递增式协作
  • 邮件:你来我往
  • 论坛:跟帖回复
  • 独占式协作
  • 文档传递
  • 微软VSS
  • 合并式协作
  • SVN
  • Git
  • diff,patch,merge指令

常见的静态多人协作方式

从静态到动态

静态协作的比喻

  • 拼接画
  • 积木

静态协作的特点

  • 多版本
  • 块操作
  • 有协作动作

静态协作的缺点

  • 版本碎片化
  • 缺乏时效性
  • 协作动作成本高

静态多人协作的成本,会随着加入人数和项目的复杂度呈几何级数的增长。因此,对于企业来说,急需一种无协作动作、唯一版本、版本可控的无协作成本模式,即动态多人协作模式。

动态的多人协作

动态协作的比喻

  • 一起画黑板

动态协作的特点

  • 唯一版本
  • 原子操作
  • 无协作动作

动态协作的优点

  • 版本可控
  • 实时
  • 无协作成本

典型产品

  • Office Online
  • 石墨
  • OnlyOffice

多人协作的基础:原理与架构

任何信息,无论其是什么展现形式,如果要做到多人实时编辑与展现,只需要实现以下三步而已:

  1. 操作化
  2. 可传输
  3. 可还原

举例说明多人协作的实现方式

操作化

操作化,指任何信息都可以转换为一组操作的集合。很容易理解,但它仍有不少值得思考的点:

1. 分割与组合

· 如何保证:信息的所有变化都可以分解为操作的集合?反之,操作如何覆盖出信息的所有变化?

· 分割的颗粒度如何决定?

• 粗一点?

• 细一点?

• 如何兼顾解释性与扩展性?

2. 绝对操作与相对操作

· 绝对操作

• 针孔打印机的完美世界

• 打印机时代的编辑噩梦

  1. 相对操作

• 4K电视不是梦

• 为什么数字电视稳定性不如模拟电视

  1. 绝对操作与相对操作比喻:时间与空间的互换
  2. 使用一款开发工具:SpreadJS,实现操作化的优势:
  3. 好用的指令集,保证覆盖信息的全部变化与操作的集合
  4. 经过实践验证的颗粒度,完美兼顾解释性与扩展性平衡

可传输

可传输,就是指操作有办法通过网络传输给其他终端。实现动态多人协作,需要考虑以下几点:

  1. 传输内容
  2. 原始文本

• 清晰

• 冗余

  1. 压缩技术

• 逻辑压缩

• 协议压缩

• 手动压缩

  1. 网络协议
  2. Socket

• TCP

• UDP

  1. HTTP
  2. WebSocket
  3. QoS(Quality of Service,服务质量)
  4. 快速失败
  5. 自动回滚
  6. 自动重连
  7. 自动恢复

可还原

可还原,就是指接收到来自网络的操作消息后,可以在本地完全一致地再次执行该操作。可还原包括了:

  1. 绝对操作的还原
  2. 控制体积
  3. 合理的提示
  4. 相对操作的还原
  5. 严格的顺序性
  6. 从源头保障顺序性
  7. 顺序性的补救
  8. 本地操作的还原
  9. 过滤收到的操作集合
  10. 从源头细化操作颗粒
  11. 本地保存本地执行
  12. 无入侵的还原
  13. 定义入侵
  14. 排除入侵
  15. 千人千面

多人协作的难点:乱序与冲突

乱序

乱序的表现形式如下图,小明在客户端执行了一系列操作,传递到服务器时发生乱序,导致小花看到了截然不同的信息:

为了解决乱序问题,可以尝试以下方法:

1. 用性能换取顺序正确——基于协议

2. 用性能换取顺序正确——基于回执

两种方法的优缺点

  1. 基于协议

• 优点

· 可靠,历经考验

· 简单,无需开发

• 缺点

· 资源开销高

· 必须整套使用

  1. 基于回执

• 优点

· 自主可控,按需开发

· 资源开销可控

• 缺点

· 需要自己投入开发

· 应用层逻辑控制使得网络复杂度向外蔓延

· 复杂度带来维护成本

基于乱序处理方法的总结

网络不是绝对可靠的,为了实现相对可靠,需要付出一定的代价,企业需要考虑的是:如何衡量所付出的代价与产出成正比。

冲突

比乱序更高级的一种表现形式,存在多向、多维度等问题。

如何避免错误的蔓延?

原则:任何一次不一致,都会导致后续的操作基于错误的信息进行,从而不断扩大错误,造成无法收拾的结果。因此,不一致是不能被容忍的。

解决办法:

  1. 严格一致性:独占
  2. 最终一致性:检查与修复
  3. 非技术手段:设计与提示

严格的一致性

独占就是同一时间同一范围只能由一人操作。

  1. 范围(以SpreadJS为例)

    1. 整个表格,类似VSS
    2. 工作表
    3. 单元格范围
  2. 排他性
    1. 独占冲突时,必有一方被弹开
    2. 直到占有者解开,不然无法占用
    3. 占用前无法操作
    4. 原理和锁基本一致
  3. 优点
    1. 可以确保严格一致性,不会产生多版本的错误累积
    2. 比起修复恢复这类弥补手段,一开始就不出错的成本最低
    3. 逻辑清楚简单,开发维护成本低
  4. 缺点
    1. 静态协作的味道
    2. 独占动作严重影响体验
    3. 大幅降低协作效率
  5. SpreadJS提供的支持
    1. 锁定工作表
    2. 锁定单元格

最终一致性

基于唯一正确顺序,察觉客户端的错误,撤销错误操作后重新执行正确的操作。

  1. 唯一正确

    1. 服务器到达顺序
    2. 协作边界分流
    3. P2P+选举算法
  2. 察觉错误
    1. 服务器回执id
    2. 服务器回执操作,MS
  3. 撤销错误
    1. 撤销到错误发生前的一步操作的结果
    2. 利用SpreadJS的撤销功能
    3. 利用操作版本快照
  4. 重新执行
    1. 操作队列需保存
    2. 区分好无感知执行与显式执行

非技术手段

技术手段追求错误0发生,而非技术手段则可以降低错误发生的可能性。

  1. 选中框

    1. 非常重要但不显眼
    2. 人性化的独占
    3. 操作的预期
    4. 协作感
    5. SpreadJS提供高度可自定义的边框
  2. 协作设计
    1. 设计协作区域与合并手段
    2. 设置权限
    3. SpreadJS提供几乎Excel的所有公式
    4. SpreadJS提供了工作表和单元格锁定功能
  3. 单向协作
    1. 区分单向与双向协作的场景
    2. 对单向协作尽量放开
    3. 对双向协作严谨设计

针对多人协作难点的总结

首先,可以明确一点:SpreadJS完全可以用作多人协作系统开发的组件。原因在于:

• SpreadJS的产品质量是毋庸置疑的

• SpreadJS在设计之初,便考虑到了多人协作的可能,而除此之外,绝大多数的前端产品都不是为了多人协作而设计的

• 多人协作需要中心系统的支持,SpreadJS基于纯前端的体系架构可以很容易的嵌入系统开发,而无需过多考虑与原生系统的兼容性,这是常规组件是无法做到的

• 要实现多人协作,需要投入一定的开发成本,SpreadJS作为一款开发工具,可以有效帮助开发人员减轻代码量

多人协作表格的本质:

• Server – Clients 中心系统,类似数值敏感的小型网游

• 任何这类系统都是在体验和正确性中寻求平衡

多人协作表格的特点:

• 表格的数值敏感性高于网游,数据操作和存储的挑战更大

• 表格的计算复杂度更高,尤其涉及复杂公式嵌套与全量统计筛选

• Web存在天花板,所以复杂的页游并不多见,端游较多

对SpreadJS这类开发工具/组件的展望与期待

1. SpreadJS 已经可以很好地支持多人协作的最终一致性。如果能支持多人多撤销队列,或者撤销重做自定义,那么就可以给用户提供更加易用且多样化的体验效果,从此丝般顺滑不是梦。

2. SpreadJS的绝大部分功能是支持命令的,这使得操作化变得更简单。如果SpreadJS能开放命令自定义,便可以让自主控制颗粒度成为可能,用户可以针对具体的业务逻辑做出更加精细化的操作转换,大幅提高协作效率。

3. SpreadJS不仅在数据录入、数据填报等方面表现出强大的功能,其各类统计分析与图形化手段也是一个不少,一旦明年的透视表功能上线,使用SpreadJS开发在线协同系统的数据商业价值将更易体现,用户将体验到“表格”无限的魅力与威力。

4. 表格在多人协作中的数据量增长速度比单人使用时快得多,希望SpreadJS可以支持更大的数据量,尤其是在大数据量情况下仍旧保持操作的性能与体验。

以上就是本期公开课《如何实现可多人协作的“在线excel”系统?》的部分摘要,如果您对在线协作系统的开发感兴趣,点击文末了解更多,预约课程。

如何多人共同编辑_如何实现可多人协作的“在线excel”系统?相关推荐

  1. 如何实现可多人协作的“在线excel”系统?

    由于工作分工.工作进展的不同,团队内部的信息往往需要及时同步,然而伴随着团队经营规模的不断扩大,在线协同.多人协作,以及软件项目管理等问题将会接踵而至,成为制约企业高效发展的瓶颈. 市面上,可多人在线 ...

  2. 如何多人共同编辑_微信编辑器可以多人协作排版吗?

    微信公众号图文怎么分享出去让别人帮忙排版?微信编辑器协作排版技巧 哈喽,大家好,猫头鹰今天又双叒叕来分享微信编辑器使用小技巧啦,今天我们讲的这个功能或许有的小伙伴已经知道了,主要是给那些还不清楚该功能 ...

  3. 想实现多人协作的“在线Excel”?真没那么简单

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel是我们办公中常用的工具 ,它几乎能为我们处理大部分数据,友好的交互 ...

  4. python为什么这么多人开始炒股_炒股90%的人会亏钱,为啥还有那么多人去炒股?...

    已逝的复旦大学管理学院教授.知名证券专家谢百三曾讲过这样一句话:不入股市,没有亏损的危险,但有一辈子贫困的危险. 我觉得,这是对这个问题最好的回答. 亏损与贫困,哪个更可怕? 我觉得贫困更可怕.亏损只 ...

  5. messenger支持查找附近的人功能吗_可以查找附近的人那个软件叫什么?

    2018-05-29 怎样查找刚删除的软件 你查找他的QQ号,再加他为好友就可以了;可以去QQ好友(群)恢复系统恢复好友.huifu.qq.com/系统可供用户恢复好友的范围和类型如何?1. 时间范围 ...

  6. 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统

    微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...

  7. Excel多人同时编辑的几种方案与比较

    1.写在前面的话 本人从事信息化工作多年,对Excel等电子表格的多人同时编辑接触较早,帮助客户实施的方案也较多,因此有些体会和认识.正好看到网上这方面的讨论较多,但都不完整,我就进一步做了专题调研, ...

  8. 模拟人体质检测_网络通信模块

    模拟人体质检测_网络通信模块 Introduction 模拟人体质测试是研一在实验室参与的项目,为期4+个月, 整个项目的架构(数据传输是双向的): 体质测试传感器-stm32-cc2530通信板-c ...

  9. python共享文件协同编辑_那些可多人协作编辑的在线文档工具

    最近使用了下石墨文档,简直就是在线版的Word,Excel,PPT,而且可以多人实时编辑预览,真的太好用了,搜索了下发现这种在线文档工具还挺多的,这里做个整理推荐. 石墨文档 这个很多人应该都用过,石 ...

最新文章

  1. 浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务)
  2. ospf hello时间和dead_深入理解OSPF协议----第二讲:OSPF报文类型
  3. Apexchart整数多出小数点
  4. 让您的Xcode键字如飞
  5. python dataframe 查看为空值_Python pandas.DataFrame 找出有空值的行
  6. linux grub error 22,Linux系統grub常見錯誤問題解決
  7. 【Spring】HttpMessageNotWritableException No converter found for return value of type
  8. linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式
  9. 【干货】B站品牌营销指南.pdf(附100页pdf下载链接)
  10. linux安装 grub失败,安装linux+windows的系统 如果grub引导失败的解决方法
  11. 蚂蚁、字节、拼多多,你的简历能通过几家?
  12. linux中nmcli命令使用及网络配置
  13. git version可以卸载吗_sourcetree使用:问题是有推送提示,但显示为空。原因:git版本过低...
  14. (转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
  15. linux停止license服务器,LICENSE · 机器不学习/linux-command - Gitee.com
  16. 如何下载使用期刊 LateX 模板
  17. 马尔科夫区制转移向量自回归模型,MSVAR模型,MS-VAR模型的使用和操作过程
  18. maxscale mysql 主从_MariaDB主从配置与MaxScale实现MySQL读写分离
  19. kubernetes中容器(pod)间的通信及环境变量设置
  20. TouchScript中文---The Journey of a Touch Point

热门文章

  1. windows相关知识点分析
  2. mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
  3. C#中跨线程访问控件问题解决方案
  4. MFC之实现鼠标自动左击,频率可调,支持热键
  5. 华为人工智能计算机平台,华为发布首个人工智能移动计算平台
  6. stm32车牌识别_基于STM32单片机的车牌识别
  7. 机器学习中数据集的拆分
  8. SQL注入——基于报错的注入(五)
  9. oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数
  10. confirm修改按钮文字_踏入MG动画设计的门,才知道文字动画这么重要……