1、离线使用浏览器版
在线编辑器严重依赖网络的问题严重困扰着那些走在路上的文字工作者,譬如:记者,学生,旅行者。在没有客户端时候我们希望浏览器也可以担负离线编辑的责任,所以我们将 Cmd Markdown 的网页版本身改造成了可以离线使用:现在开始,只需要访问过一次我们的 网页版链接 您都可以在下次没有网络的情况下重新访问这个网址,离线使用我们的网页版 Cmd Markdown。是的,在没有网络的时候仍旧使用浏览器的确和直觉不太相符,但是这真的发生了,所以请收藏我们的 网页版链接 以备不时之需。
在不稳定的网络条件下,Cmd Markdown 同样可以很好的工作。它会根据网络状况动态切换离线在线模式,确保数据首先存储在本地,再次更新到服务器做备份。不必担心发生数据丢失的状况。
2. 智能云同步
无论是可以离线使用的浏览器版,还是客户端,在离线使用并重新连接网络之后,所有新增、删除、修改的文稿都会和服务器上的版本做同步处理,保证那些在离线状态下的修改在服务器有同样的备份。在今后更换电脑、工作地点的时候,都能再次调阅编辑最新的内容。这些动作会适时自动进行,大多数情况下并不需要用户主动干预,我们有一套智能的同步算法确保不同客户端的同一份文稿在同步的时候进行自动合并的动作,譬如:
我们测试了许多知名云笔记品牌的做法,很遗憾面对此种局面,它们大多粗暴地选择直接用 A'' 的结果覆盖 A' 的内容,造成用户编辑过程丢失的恶果,简直无力吐槽。
3. 用户干预下的版本冲突处理
智能云同步可以解决大多数文稿版本问题,但是在用户意图本身就冲突的时候,我们仍然会以最大的善意要求用户确认其真实意图,举个例子:
当客户端 2 连接上网络的时候,除了作者谁都无法知道其真实意图:将 222 修改为 AAA 抑或是 BBB?此时 Cmd Markdown 会自动计算这些差异并让用户确认其真实意图,如下图:
4. Windows / Mac / Linux 全平台客户端
在离线使用和智能云同步的基础上,我们开始重新构造全平台的客户端,为了让一个网页版的文字编辑器变身为客户端,我们斟酌了代码库的每一处细节,改写了个整个代码库的基础设施,并骄傲地宣布 Cmd Markdown 不再单单是一个浏览器里的应用,它可以独立运行在三大操作系统,离线使用,并且智能云同步。我们也为现在的不足做好了准备:完善的软件更新系统将随时待命推送新功能和补丁到客户端。
5. 558% 的性能提升 和 基于差异的请求
天下武功唯快不破,愈快则愈强。性能问题始终是每次升级的重点,这一次考验 Cmd Markdown 在极端大文稿下的表现,严谨、有效地改进了渲染算法,最终将渲染效力提升至原先的 558%。
一般来说云笔记将用户当前编辑内容保存到云端的做法有两种:
先本地保存用户数据,定时上传到服务器。
用户击键的动作都会触发一次云端保存。
方案 1 可以有效减少用户的卡顿感(一段时间内不会发生网络传输),但是如果本机掉电或者程序崩溃就会导致用户数据的丢失。
方案 2 可以实时将用户的数据备份在服务器,保证数据的完整性,但是假设有一份二万字的大文稿,则每次击键都会导致一次上传两万字的网络传输行为,因此在大文稿的编辑过程中会有明显的卡顿现象。
Cmd Markdown 在之前的版本中采纳了方案 2, 这一次,依然是通过算法改进,我们会在击键动作以后,计算前后文本内容的差异,只将差异部分上传到云端,再由云端的程序将这部分差异和现存的服务器端版本进行合并后保存。这种做法有效地减小了网络传输的带宽,从而杜绝大文稿下的卡顿现象。我们的服务器也将动用更多的计算能力来处理成千上万的差异合并请求。在较差的网络环境里一样实现了稳定的文本内容传输。
6. 基础编辑器组件升级:列模式、增强的 Vim/Emacs 模式
我们回来谈谈编辑器本身,继上次之后我们再次升级编辑器组件。
1. 引入 列模式
许多用户很喜欢 sublime 一类编辑器的列模式,现在您同样可以在 Cmd Markdown 通过 Ctrl + Alt + Up/Down 进入列模式,在多行的文稿上显示多处光标,随后同时编辑多行内容。
2. 支持 / ? 全文搜索、替换和列操作的 Vim 模式
通过右上角的菜单进入 Vim 模式:
搜索: 和原生的 Vim 一样,在光标状态下按下 / 或 ? + 关键字,可以对全文内容进行关键字搜索。
替换: 按下 : 可以进入命令模式,使用 %s/orig/repl 进行全文替换动作。
列操作: 在光标模式下按下 Ctrl + Alt + J/K 进入列操作模式。
3. 更好用的 Emacs 模式
原先在 Chrome 浏览器下 Emacs 常用快捷键 Ctrl + N 被 Chrome 占用为打开新窗口,导致此模式很难有实用价值,本次发布的客户端表示全无压力,因此 Emacs 的粉丝们终于可以在客户端上使用你们最喜欢的 Emacs 模式了。
7. 问题修复
在 github 的 问题列表中,我们有选择的进行了以下修复:
防止在批注内容中进行恶意的 XSS 攻击
删除大块段落时,避免用户批注丢失
按键 Ctrl + S 时,避免弹出保存对话框
在页面跳转中可定制的 hash anchor
基于用户所在时区的时间显示