客户端软件相比较于 web 来说,还有一个非常大的区别就是有功能更新时,有一个升级过程,不像 web 直接刷新页面即可 。语雀桌面端作为迭代迅速的产品,对于升级这块也是踩了不少坑 。
文章插图
语雀桌面端由两大部分组成:包括 Electron 和 Node.js 等基础模块的软件包 + 以及自己的业务代码 。
mac OS:Mac 下的升级流程比较简单,软件下载完成后,利用 hdiutil来模拟用户手动安装流程,用户重启即可完成安装 。
windows:Windows 下因为环境特殊性,需要下载安装包后,通过主进程自动打开安装界面,引导用户进行手动一步一步安装 。
其实这种方案很好的满足的我们早期的功能迭代,但是随着用户量上涨,也遇到了很多问题 。
文章插图
比如:
- 每次升级带宽消耗巨大:对于每次安装每个 UV 都有近 100M 的下载,每次推送版本时,都会遇到 OSS 流量告警,这背后都对应着成本;
- 安装体验差:Windows 下因为每次升级几乎都是一次新的安装流程,所以体验也是比较差的,经常收到用户吐槽 。
所以我们就调研了一种增量更新的方案,一个 Electron 程序包括 Electron 核心包以及业务代码,其实每次变更的仅仅是业务代码,所以理论上每次更新只需要增量更新业务代码即可 。
文章插图
Mac 下增量直接下载到增量代码后,替换掉即可 。
Windows 下比较复杂,我们主要遇到两个问题:
- 文件占用问题:由于 Windows 系统特性,如果某个文件在使用,会无法删除 。所以说如果要替换,肯定关闭程序,然后进行删除操作后再启动 。所以我们写了一个 .exe 可执行文件来做关闭程序、更新文件、启动语雀 。
- UAB 权限控制:文件写入另一个问题是 C 盘文件一般是需要授权才可以操作的 。我们软件启动没办法拿到这么高权限 。不过还在 Windows 7 及以后新增了一个 PowerShell 功能,通过这个功能执行,能引导用户授权,拿到更高级的权限 。
当然过程中还碰到不少细节问题,比如替换过程中路径中英文问题、用户自定义过环境变量位置问题等等
架构概览 - 基础能力沉淀
另外我们在做软件的过程中,也沉淀了一些与业务无耦合的组件:
文章插图
- 多窗口管理:当给用户提供提供更方便的多窗口编辑能力时,如何去管理这些窗口打开,关闭,性能监控等;
- Webview:不同编辑器以及子应用都是通过 Webview 来承载的,需要有一个通用的模块来维护系统中用到的各个 webview 的生命周期等;
- 离线在线:电脑离线和在线状态获取,虽然浏览器有提供这个状态的获取和事件监听,但是 Windows 下不太准确 。我们封装了一个比较通用的模块 。
从架构上来说,相较于用了多酷炫的技术,更重要的是研发交付效率高不高,性能怎么样,稳定性高不高 。我们认为以下三点是架构好坏评判的重要标准 。
文章插图
架构重点 - 交付效率
从桌面端功能上来说,包括编辑器在内,有超过 60% 的功能模块都是与 web 一致的,所以开始是用到了同构的方案 。
推荐阅读
- 描写蚂蚁的成语?关于蚂蚁的诗句和谚语
- 曹操为什么建造铜雀台?曹操建铜雀台是为了干什么
- 最有深意的生日祝福语?含义深刻的生日祝福语
- 我和周先生共用一台电脑英语?我和周先生不熟
- 教师节祝福语2021简短暖心短句?2021教师节祝福语大全温暖好听
- 教师节写贺卡的祝福语?送给老师的祝福语
- 晚安心语致自己适合发朋友圈的?晚安朋友圈的句子触动人心的
- 早起的鸟儿有虫吃格言?早起的鸟儿有虫吃短句
- 是我多管闲事?多管闲事的词语
- 白浅|桃花番外370白浅二胎临盆,玉清宫出现异样,墨渊语言神族将遭劫