请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

葡萄城三幺三
论坛元老   /  发表于:2019-12-9 14:40  /   查看:12835  /  回复:11
[i=s] 本帖最后由 葡萄城三幺三 于 2020-1-7 10:47 编辑 [/i]

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

[/align][align=left]由于工作分工、工作进展的不同,团队内部的信息往往需要及时同步,然而伴随着团队经营规模的不断扩大,在线协同、多人协作,以及软件项目管理等问题将会接踵而至,成为制约企业高效发展的瓶颈。
[/align]
[align=left]这些问题,通常表现为:[/align][align=left][list=1]
[*]跨部门、地区协作不便
[*]过度依赖文件夹共享的形式,不能确保文档的安全性
[*]没法纪录和体现职工对文本文档的意见和评价
[*]文档记录发生变更时,无法及时通知到相关部门和员工
[*]文档无法在线协同编辑,缺失必要的流程管控
[*]多人共同编辑一个文档,无法留存修改记录和历史版本
[/list][/align]
[align=left]针对上述问题,目前最佳的解决方案是:使用一款可多人在线协同办公的软件或工具。市面上,这类软件有很多,比如国外的Google Docs、Office365,以及国内的腾讯文档、石墨文档、有道云协作等。

[/align][align=left][color=rgb(26, 26, 26)][size=11.5pt] [/size][/color][/align][align=left]本文将不再过多赘述这类成品软件,而是[b][color=#9932cc]深入协同办公系统的实现原理[/color][/b],从企业IT管理者的角度出发,深入研究多人协作的形式、基础和难点,分析一款开发工具应具备怎样的特点,才是实现多人协作“在线Excel”系统的关键。
[/align]
[align=left]以下内容,节选自葡萄城公开课《如何实现可多人协作的“在线Excel”系统?》,欢迎大家提前预约,听课还能获得精美2020年定制台历~[/align][align=left][size=4][color=#9932cc][b]直播地址:[url=https://live.vhall.com/483759540]https://live.vhall.com/483759540[/url][/b][/color][/size][/align]
[font="][size=4][b]多人协作的形式:历史与发展[/b][/size][/font][align=left]多人协作的历史十分悠久,起源于静态的多人协作模式,即每个人先完成自己的工作,然后再进行汇总。[/align]
[b][size=3][color=#800080]静态的多人协作模式[/color][/size][/b][align=left]递增式协作[/align][align=left][list]
[*]邮件:你来我往
[*]论坛:跟帖回复
[/list][/align][align=left]独占式协作[/align][align=left][list]
[*]文档传递
[*]微软VSS
[/list][/align][align=left]合并式协作[/align][align=left][list]
[*]SVN
[*]Git
[*]diff,patch,merge指令
[/list] image.png150366820.png [/align][align=left](常见的静态多人协作方式)[font=等线]
[/font][/align][align=left][font=等线]
[/font][/align][align=left][font=等线] [/font][/align][b][size=3][color=#800080]从静态到动态[/color][/size][/b][align=left]静态协作的比喻[/align][align=left][list]
[*]拼接画
[*]积木
[/list][/align][align=left]静态协作的特点[/align][align=left][list]
[*]多版本
[*]块操作
[*]有协作动作
[/list][/align][align=left]静态协作的缺点[/align][align=left][list]
[*]版本碎片化
[*]缺乏时效性
[*]协作动作成本高
[/list][/align]
[align=left]静态多人协作的成本,会随着加入人数和项目的复杂度呈几何级数的增长。因此,对于企业来说,急需一种无协作动作、唯一版本、版本可控的无协作成本模式,即动态多人协作模式。
[color=#800080]
[/color][/align][b][size=3][color=#800080]动态的多人协作[/color][/size][/b][align=left]动态协作的比喻[/align][align=left][list]
[*]一起画黑板
[/list][/align][align=left]动态协作的特点[/align][align=left][list]
[*]唯一版本
[*]原子操作
[*]无协作动作
[/list][/align][align=left]动态协作的优点[/align][align=left][list]
[*]版本可控
[*]实时
[*]无协作成本
[/list][/align][align=left]典型产品[/align][align=left][list]
[*]Office Online
[*]石墨
[*]OnlyOffice
[/list][/align][b][font="][size=4]
[/size][/font][/b][b][font="][size=4]多人协作的基础:原理与架构[/size][/font][/b][align=left]任何信息,无论其是什么展现形式,如果要做到多人实时编辑与展现,只需要实现以下三步而已:[/align][align=left][list=1]
[*]操作化
[*]可传输
[*]可还原
[/list][/align][align=center][align=left] image.png197226256.png [/align][/align][align=center][align=left](举例说明多人协作的实现方式)

[/align][/align][b][size=3][color=#800080]操作化[/color][/size][/b][align=left]操作化,指任何信息都可以转换为一组操作的集合。很容易理解,但它仍有不少值得思考的点:[/align][align=left]1、分割与组合[/align][align=left][list]
[*]如何保证:信息的所有变化都可以分解为操作的集合?反之,操作如何覆盖出信息的所有变化?
[*]分割的颗粒度如何决定?
[/list][/align][align=left]              粗一点?[/align][align=left]              细一点?[/align][align=left]              如何兼顾解释性与扩展性?[/align][align=left]2、绝对操作与相对操作[/align][align=left][list]
[*]绝对操作
[/list][/align][align=left]              针孔打印机的完美世界[/align][align=left]              打印机时代的编辑噩梦[/align][align=left][list]
[*]相对操作
[/list][/align][align=left]              4K电视不是梦[/align][align=left]              为什么数字电视稳定性不如模拟电视[/align][list]
[*]绝对操作与相对操作比喻:时间与空间的互换
[/list]
3、使用一款开发工具:SpreadJS,实现操作化的优势:
[list]
[*]好用的指令集,保证覆盖信息的全部变化与操作的集合
[*]经过实践验证的颗粒度,完美兼顾解释性与扩展性平衡
[/list]
[b][size=3][color=#800080]可传输[/color][/size][/b][align=left]可传输,就是指操作有办法通过网络传输给其他终端。实现动态多人协作,需要考虑以下几点:[/align][align=left][align=left][b]1、传输内容[/b][/align][align=left]原始文本[/align][align=left][list]
[*]清晰
[*]冗余
[/list][/align][align=left]压缩技术[/align][align=left][list]
[*]逻辑压缩
[*]协议压缩
[*]手动压缩
[/list][/align][align=left][b]2、网络协议[/b][/align][align=left]Socket[/align][align=left][list]
[*]TCP
[*]UDP
[/list][/align][align=left]HTTP[/align][align=left]WebSocket[/align][align=left][b]3、QoS(Quality of Service,服务质量)[/b][/align][align=left]快速失败[/align][align=left]自动回滚[/align][align=left]自动重连[/align][align=left]自动恢复[/align][/align]
[size=3][color=#800080][b]可还原[/b][/color][/size][align=left]可还原,就是指接收到来自网络的操作消息后,可以在本地完全一致地再次执行该操作。可还原包括了:[/align][align=left][b]1、绝对操作的还原[/b][/align][align=left][list]
[*]控制体积
[*]合理的提示
[/list][b]2、相对操作的还原[/b]
[list]
[*]严格的顺序性
[*]从源头保障顺序性
[*]顺序性的补救
[/list][b]3、本地操作的还原[/b]
[list]
[*]过滤收到的操作集合
[*]从源头细化操作颗粒
[*]本地保存本地执行
[/list][b]4、无入侵的还原[/b]
[list]
[*]定义入侵
[*]排除入侵
[*]千人千面
[/list][/align]
[size=4][b][font="]多人协作的难点:乱序与冲突[/font][/b][b]乱序[/b][/size][align=left]乱序的表现形式如下图,小明在客户端执行了一系列操作,传递到服务器时发生乱序,导致小花看到了截然不同的信息:[/align] image.png445209655.png
[align=left]为了解决乱序问题,可以尝试以下方法:[/align][b]1. 用性能换取顺序正确——基于协议[/b] image.png809722289.png
[b]2. 用性能换取顺序正确——基于回执[/b]
image.png931176147.png

[b][size=3][color=#800080]两种方法的优缺点
[/color][/size]1、基于协议[/b]
[align=left]优点[/align][align=left][list]
[*]可靠,历经考验
[*]简单,无需开发
[/list][/align][align=left]缺点[/align][align=left][list]
[*]资源开销高
[*]必须整套使用
[/list][/align][list=1]




[b]2、基于回执[/b][/list][align=left]优点[/align][align=left][list]
[*]自主可控,按需开发
[*]资源开销可控
[/list][/align][align=left]缺点[/align][align=left][list]
[*]需要自己投入开发
[*]应用层逻辑控制使得网络复杂度向外蔓延
[*]复杂度带来维护成本
[/list][/align]
[b]基于乱序处理方法的总结[/b][align=left]网络不是绝对可靠的,为了实现相对可靠,需要付出一定的代价,企业需要考虑的是:如何衡量所付出的代价与产出成正比。[/align]
[b][size=3][color=#800080]冲突[/color][/size][/b][align=left]比乱序更高级的一种表现形式,存在多向、多维度等问题。[/align][align=left] image.png552463683.png [/align]
[b][color=#800080]如何避免错误的蔓延?[/color][/b][align=left]原则:任何一次不一致,都会导致后续的操作基于错误的信息进行,从而不断扩大错误,造成无法收拾的结果。[b]因此,不一致是不能被容忍的。[/b][/align][align=left]解决办法:[/align][list=1]
[*]严格一致性:独占
[*]最终一致性:检查与修复
[*]非技术手段:设计与提示
[/list]
[b][color=#800080]严格的一致性[/color][/b][align=left]独占就是同一时间同一范围只能由一人操作。[/align][list=1]



[b]1、范围(以SpreadJS为例)[/b][/list][list=1]
[*]整个表格,类似VSS
[*]工作表
[*]单元格范围
[/list][b]2、排他性[/b]
[list=1]
[*]独占冲突时,必有一方被弹开
[*]直到占有者解开,不然无法占用
[*]占用前无法操作
[*]原理和锁基本一致
[/list][b]3、优点[/b][list=1]
[*]可以确保严格一致性,不会产生多版本的错误累积
[*]比起修复恢复这类弥补手段,一开始就不出错的成本最低
[*]逻辑清楚简单,开发维护成本低
[/list][b]4、缺点[/b][list=1]
[*]静态协作的味道
[*]独占动作严重影响体验
[*]大幅降低协作效率
[/list][b]5、SpreadJS提供的支持[/b][list=1]
[*]锁定工作表
[*]锁定单元格
[/list]
[b][color=#800080]最终一致性[/color][/b][align=left]基于唯一正确顺序,察觉客户端的错误,撤销错误操作后重新执行正确的操作。[/align][b]1、唯一正确[/b][list=1]
[*]服务器到达顺序
[*]协作边界分流
[*]P2P+选举算法
[/list][b]2、察觉错误[/b][list=1]
[*]服务器回执id
[*]服务器回执操作,MS
[/list][b]3、撤销错误[/b][list=1]
[*]撤销到错误发生前的一步操作的结果
[*]利用SpreadJS的撤销功能
[*]利用操作版本快照
[/list][b]4、重新执行[/b][list=1]
[*]操作队列需保存
[*]区分好无感知执行与显式执行
[/list][b]
[color=#800080]非技术手段[/color][/b][align=left]技术手段追求错误0发生,而非技术手段则可以降低错误发生的可能性。[/align][b]1、选中框[/b][list=1]
[*]非常重要但不显眼
[*]人性化的独占
[*]操作的预期
[*]协作感
[*]SpreadJS提供高度可自定义的边框
[/list][b]2、协作设计[/b][list=1]
[*]设计协作区域与合并手段
[*]设置权限
[*]SpreadJS提供几乎Excel的所有公式
[*]SpreadJS提供了工作表和单元格锁定功能
[/list][b]3、单向协作[/b][list=1]
[*]区分单向与双向协作的场景
[*]对单向协作尽量放开
[*]对双向协作严谨设计
[/list][b][size=3][color=#800080]
针对多人协作难点的总结[/color][/size][/b][align=left]首先,可以明确一点:SpreadJS完全可以用作多人协作系统开发的组件。原因在于:[/align][align=left][list]
[*]SpreadJS的产品质量是毋庸置疑的
[*]SpreadJS在设计之初,便考虑到了多人协作的可能,而除此之外,绝大多数的前端产品都不是为了多人协作而设计的
[*]多人协作需要中心系统的支持,SpreadJS基于纯前端的体系架构可以很容易的嵌入系统开发,而无需过多考虑与原生系统的兼容性,这是常规组件是无法做到的
[*]要实现多人协作,需要投入一定的开发成本,SpreadJS作为一款开发工具,可以有效帮助开发人员减轻代码量
[/list][/align]
[align=left][b]多人协作表格的本质:[/b][/align][align=left][list]
[*]Server –Clients 中心系统,类似数值敏感的小型网游
[*]任何这类系统都是在体验和正确性中寻求平衡
[/list][/align][align=left][b]多人协作表格的特点:[/b][/align][align=left][list]
[*]表格的数值敏感性高于网游,数据操作和存储的挑战更大
[*]表格的计算复杂度更高,尤其涉及复杂公式嵌套与全量统计筛选
[*]Web存在天花板,所以复杂的页游并不多见,端游较多
[/list][/align]
[b][size=4][color=#800080][font="]对[/font]SpreadJS[font="]这类[/font][font="]开发工具[/font]/[font="]组件[/font][font="]的展望与期待[/font][/color][/size][/b][align=left][list=1]
[*]SpreadJS 已经可以很好地支持多人协作的最终一致性。如果能支持多人多撤销队列,或者撤销重做自定义,那么就可以给用户提供更加易用且多样化的体验效果,从此丝般顺滑不是梦。
[*]SpreadJS的绝大部分功能是支持命令的,这使得操作化变得更简单。如果SpreadJS能开放命令自定义,便可以让自主控制颗粒度成为可能,用户可以针对具体的业务逻辑做出更加精细化的操作转换,大幅提高协作效率。
[*]SpreadJS不仅在数据录入、数据填报等方面表现出强大的功能,其各类统计分析与图形化手段也是一个不少,一旦明年的透视表功能上线,使用SpreadJS开发在线协同系统的数据商业价值将更易体现,用户将体验到“表格”无限的魅力与威力。
[*]表格在多人协作中的数据量增长速度比单人使用时快得多,希望SpreadJS可以支持更大的数据量,尤其是在大数据量情况下仍旧保持操作的性能与体验。
[/list][/align]
[align=left]以上就是本期公开课《如何实现可多人协作的“在线Excel”系统?》的部分摘要,如果您对在线协作系统的开发感兴趣,欢迎点击预约.[/align]
1206客户公开课2.jpg
葡萄城各种福利、活动官方饲养员,认准三三。关注微信号,获得更多福利消息、资讯。

16 个回复

hongshanshanSpreadJS 开发认证
金牌服务用户   /  发表于:2019-12-9 17:55:04
沙发

回帖奖励 +66 金币

很需要

点评

直播报名走一波~  发表于 2019-12-9 17:57
回复 使用道具 举报
wengMQ悬赏达人认证
银牌会员   /  发表于:2019-12-10 10:19:07
板凳

回帖奖励 +66 金币

:)
回复 使用道具 举报
firestarman
高级会员   /  发表于:2019-12-11 18:13:58
地板

回帖奖励 +66 金币

very geiliable

点评

报名报名~听课学起来  发表于 2019-12-12 11:12
回复 使用道具 举报
amtath悬赏达人认证 活字格认证
论坛元老   /  发表于:2019-12-12 14:34:54
5#

回帖奖励 +66 金币

let me sese

点评

you see you baoming  发表于 2019-12-12 14:48
回复 使用道具 举报
hzsstudySpreadJS 开发认证
初级会员   /  发表于:2019-12-16 18:45:57
6#

回帖奖励 +66 金币

一起进步学习

点评

快来报名~  发表于 2019-12-17 09:23
回复 使用道具 举报
successit悬赏达人认证
银牌会员   /  发表于:2019-12-17 07:49:18
7#

回帖奖励 +66 金币

学习学习

点评

报名见  发表于 2019-12-17 09:23
回复 使用道具 举报
zxx
初级会员   /  发表于:2019-12-18 16:29:54
8#

回帖奖励 +66 金币

正好准备这个方向,学习学习
回复 使用道具 举报
tyjyd
注册会员   /  发表于:2020-1-6 17:18:05
9#
学习学习,了解了解
回复 使用道具 举报
Ngaymai93
注册会员   /  发表于:2020-2-29 16:27:24
10#
欢迎来极速赛车
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部