基于 Electron 开发桌面 GUI 应用并不是完美的方案,它也有它的不足,综合来说有以下几点。
- 打包后的应用体积巨大:一个功能不算多的桌面应用,通过 electron-builder 压缩打包后至少也要 40MB。如果开发者不做额外的 Hack 工作的话,用户每次升级应用程序,还要再下载一次同样体积的安装包,这对于应用分发来说是一个不小的负担。但随着网络环境越来越好,用户磁盘的容积越来越大,此问题给用户带来的损失会慢慢被削弱。
- 开发复杂度较大,进阶曲线较陡:跨进程通信是基于 Electron 开发应用必须要了解的知识点,虽然 Electron 为渲染进程提供了 remote 模块来方便开发人员实现跨进程通信,但这也带来了很多问题,比如某个回调函数为什么没起作用、主进程为什么报了一连串的错误等,这往往给已经人门但需要进阶的开发者带来困惑。
- 版本发布过快:为了跟上 Chromium 的版本发布节奏,Electron 也有非常频繁的版本发布机制,每次 Chromium 改动,都可能导致 Electron 出现很多新问题,甚至稳定版本都有很多未解决的问题。幸好 Electron 的关键核心功能一直以来都是稳定的。
- 安全性问题:Electron 把一些有安全隐患的模块和 API 都设置为默认不可用的状态,但这些模块和 API 都是非常常用的,因此有时开发者不得不打开这些开关。但是,一旦处理不当,就可能导致开发的应用存在安全隐患,给开发者乃至终端用户带来伤害。安全问题有很多值得关注的技术细节,以至于 Electron 官方文档中专门开辟出来一个章节号召程序员重视安全问题。但我认为,很多时候安全和自由是相悖的,在不损失自由的前提下提升安全指标的工作是值得肯定的,如果哪天 Electron 以安全为由停用脚本注人的技术,相信很多开发者都会反对。
- 资源消耗较大:Electron 底层基于的 Chromium 浏览器一直以来都因资源占用较多被人诟病,日前来看这个问题还没有很好的解决办法,只能依赖 Chromium 团队的优化工作。
笔记:
- 包体积:包体积忒大,因为直接将 Chromium 整个浏览器给打进去了,哪怕我们的业务代码只有很少一部分,包体积也能达到 40MB
- 进程间通信:这是 Electron 进阶所必须要掌握的知识点,Electron 入门相对比较简单,使用的都是 Web 那套,进阶阶段的主要难点就在于进程间通信
- 版本更新频繁:因为要跟上 Chromium 的更新节奏,Electron 的更新也会很快。每次 Chromium 的更新,都可能导致 Electron 出现很多新问题,甚至在 Electron 的稳定版中,也有不少 Bug。不过,Electron 的核心功能,一直以来都还是稳定的。
- 要时刻关注安全性:Electron 给我们提供的功能很多,这必然会带来不少安全性的问题。
- 资源消耗较大:Electron 的底层是基于 Chromium 浏览器的,资源主要是 Chromium 占用,对于该问题,目前只能依赖 Chromium 团队来优化了。
- 不支持 XP 用户:对于 Windows XP,Electron 不支持这类系统,如果业务需要考虑这类用户的话,那么得选其它桌面端应用开发技术。(可以考虑 NW.js)
:::info
包体积问题:随着用户的网速越来越好,用户设备的存储容量越来越大,该问题给用户带来的影响会逐步被削弱。
第三章很重要:第三章会介绍进程间的通信的代码如何写,而进程间通信,无疑是学习 Electron 的重点。
安全、自由:给我们的自由越多,安全问题自然也会越多,在 Electron 应用中,我们得做好权衡。
:::