这篇主要讲的讲的是作者不断完善SocialCalc的过程以及遇到的一些问题的解决方法
可以认为是协同文档的一种
简单记录一下:
通过发送操作本身而不是整个表的内容,来减少带宽的使用量,并且允许在不稳定的网络下恢复之前的操作
使用
PocketIO
中间件来使得一些不支持socket的老版本浏览器也可以兼容当一个文档使用了很久然后一个新的成员添加进来的时候,可能会导致新的成员需要在本地执行非常多的指令才可以达到其他成员目前的状态,并且在此期间无法进行任何的修改
通过snapshot的机制来进行弥补,比如说每执行100条指令,server就会从所有的client中拉取其目前的最新文档,并且将最新的文档保存在log中,之后新加入的成员就只需要拉取最近的一次snapshot并执行至多99条指令就可以达到最新的状态。但是也会有新的问题,比如说服务器无法对不同版本的文档进行判别,而且如果出现恶意的(malicious)的快照,后续的所有的新加入的成员都有可能拿到错误的文档。其实可以发现导致上述问题的原因就是因为服务器没有执行js(command也就是指令)的能力,所以后来作者用Node.js重写了server,使得客户端有了执行js的能力,但也因此损失了一部分的并发能力以及延迟。
因为server每次执行一个命令都需要在本地对html进行渲染,就导致CPU直接被卡死,之前使用的jsdom效率不够高,所以作者用
LiveScript
写了一个简单的DOM来实现HTML的export
。上述问题得到了解决使用W3C的
Web Worker API
使得代码可以利用多核CPU的性能优势