关于桌面应用:语雀桌面端技术架构实践

作者:易芝林(维骏) 语雀桌面端作为语雀为用户提供的生产力工具,上线两年多来始终放弃高频的迭代和衰弱的业务增长。本次次要介绍咱们在做桌面端时的一些技术架构思考和实际,同时也将分享咱们积淀的一些通用桌面利用解决方案和教训。 文章会分为四局部,首先会简略介绍语雀桌面端,而后介绍以后语雀桌面端的利用架构以及关键点,之后介绍架构中的几个架构重点项,最初在进行总结。 语雀桌面端介绍语雀是孵化自蚂蚁体验技术部的一款笔记与文档知识库工具。咱们在两年前,针对语雀用户特点,以及后续倒退策略,旨在为创作者提供更好的创作体验,推出语雀桌面客户端。 相较于现有浏览器提供的产品服务而言,咱们提供的桌面端产品次要思考以下几点: 无烦扰 :给用户一个沉迷式的创作体验,而不像浏览器有其余窗口、tab 进行烦扰,以及用完即走的用户心智。零碎级常驻 :关上速度更快,能够一键启动或者利用各类快捷工具唤起。集成更多操作系统能力 :晋升创作效率的多窗口、零碎菜单和快捷键、对文件读写、与系统软件集成等。离线 :冀望能在离线或弱网的状况下,无障碍的进行创作。 桌面端架构概览 研发测次要分为右边三层,最底层是语雀的基础设施,依赖了语雀后盾提供或封装的大量云服务,以及底层依赖的平安能力和存储模块。 两头一层是比拟偏利用架构的一些能力封装,下面是代码层面用的的辅助能力,还有主过程的模块,而后有给利用提供的一些治理能力和一些跟 UI 相干的功能模块,最上层就是基于底层架构搭建的业务利用。包含桌面端利用比拟外围的几个模块,以及一些由子利用形式承接的业务模块(前面也会具体介绍子利用这个概念) 同时最右侧也有很多辅助研发的依赖能力,来实现语雀桌面端的公布、品质和稳定性治理。 架构概览 - 关键点相比拟一般 web 利用来说,咱们感觉桌面端有以下几个能力比拟重要:包含平安、软件降级、以及桌面端通用的的根底能力: 架构概览 - 平安平安是一个生产力工具软件的生命线,特地是语雀作为一款常识管理工具,对于平安是十分看重。 根底平安下载安装包时,须要有平安管理机制,防止下载过程中被歹意替换;降级到最新的 Electron 版本(语雀目前紧跟官网大版本,同时也会参考微软的头部利用 (vscode),防止有没思考到的场景;同时用户离线下载到本地的文件,包含图片,附件等,也须要通过加密。启动平安杀毒软件:启动平安次要是在启动软件时的一些平安问题,例如二进制模块是否有加签名,防止被杀毒软件查杀导致无奈启动,也能够分割平安厂商加白名单,同时还能晋升启动速度。禁止调试:因为软件代码都会下载到客户端,能够禁止软件在客户端浏览器进行调试。数据库秘钥治理:本地数据库文件须要保障即便被歹意拿到,也要保障无奈查看到外面的内容。咱们通过生成内存安全级别的计划,确保其余非以后电脑的语雀软件即便拿到数据库文件后也无奈关上。利用平安渲染容器设置白名单来管制不被引入歹意页面;渲染过程敞开 Node 性能以及开启隔离模式,防止渲染过程权限过高;Electron 自身是 web 开发模式,所以 web 中遇到的平安问题,在 Electron 同样会遇到,能够对立解决。架构概览 - 软件降级客户端软件相比拟于 web 来说,还有一个十分大的区别就是有性能更新时,有一个降级过程,不像 web 间接刷新页面即可。语雀桌面端作为迭代迅速的产品,对于降级这块也是踩了不少坑。 语雀桌面端由两大部分组成:包含 Electron 和 Node.js 等根底模块的软件包 + 以及本人的业务代码。 Mac OS:Mac 下的降级流程比较简单,软件下载实现后,利用 hdiutil来模仿用户手动装置流程,用户重启即可实现装置。 Windows:Windows 下因为环境特殊性,须要下载安装包后,通过主过程主动关上装置界面,疏导用户进行手动一步一步装置。 其实这种计划很好的满足的咱们晚期的性能迭代,然而随着用户量上涨,也遇到了很多问题。 比方: 每次降级带宽耗费微小:对于每次装置每个 UV 都有近 100M 的下载,每次推送版本时,都会遇到 OSS 流量告警,这背地都对应着老本;装置体验差:Windows 下因为每次降级简直都是一次新的装置流程,所以体验也是比拟差的,常常收到用户吐槽。所以咱们就调研了一种增量更新的计划,一个 Electron 程序包含 Electron 外围包以及业务代码,其实每次变更的仅仅是业务代码,所以实践上每次更新只须要增量更新业务代码即可。 ...

September 21, 2022 · 1 min · jiezi