一、Electron 的介绍
Electron是利用web前端技术进行桌面应用开发的一套框架。是由 github 开发的开源框架,允许开发者使用 Web 技术构建跨平台的桌面应用,它的基本结构:
Electron = Chromium + Node.js + Native API
- Chromium:为 Electron 提供了强大的 UI 能力,可以不考虑兼容性的情况下,利用强大的 Web 生态来开发界面。
- Node.js :让 Electron 有了底层的操作能力,比如文件的读写,甚至是集成 C++ 等等操作,并可以使用大量开源的npm包来完成开发需求。
- Native API : Native API 让 Electron 有了跨平台和桌面端的原生能力,比如说它有统一的原生界面,窗口、托盘这些。
通过三者的巧妙组合,我们开发应用变的十分高效。
若想开发一个兼容多平台的桌面应用,以往常用的技术框架有wxWidgets、GTK、QT等,这些框架受语言限制,且学习成本较高,效率有限。目前一些基于前端技术的hybrid框架很流行,且已经在多个领域得到了广泛的应用和验证,比如利用前端技术+相应的打包工具可开发适配多平台的应用(PC、微信公众号、小程序、Android、IOS等)。Electron就是这样一款框架,为前端技术人员利用web前端技术开发桌面应用带来了可能,开发人员可利用已经掌握的前端技术如Html、CSS、JavaScript,以及结合一些前端技术框架:Vue、Angular、React、webpack,加之浏览器渲染引擎、Electron封装的系统API快速实现一款桌面应用的开发,Electron做了大部分复杂的工作,开发人员只需要专注在核心业务和前端技术本身。同时,通过一定的优化,Electron可以做到很好的体验。
目前有不少知名桌面应用采用Electron开发,如:开发人员熟知的Visual Studio Code、MongoDB桌面版管理工具、Skype桌面版、WhatsApp桌面版、HTTP网络测试工具Postman等。所以前端开发者不用担心案例问题。
二、Electron开发桌面程序需要用到的前端技术
Electron是基于Chromium和Node.js实现的,所以开发人员所需要使用到的前端技术主要包括以下方面:
1、Html、CSS、JavaScript(能用ES6开发最好不过,基本前沿的语法它都支持,没有兼容性负担)
2、前端开发工具Vue、Angular、React等的一种(你也可以用纯html和js开发,也是没有问题)
3、其他网络、缓存、通讯等前端技术
三、当然Electron也有不足之处,主要是:
1.打包体积大
一个小应用打包下来可能就需要几十兆,不过目前磁盘存储已经不是什么大问题,随着网路环境越来越好,磁盘容积也越来越大,这个问题给用户带来的负担越来越不明显,几乎可以忽略。
2.开发具有一定的复杂度
除需要掌握必要的前端知识外,Electron开发仍需要了解跨进程通信的一些知识点,进程上的一些问题往往还是容易给开发者带来一定的困惑,如果你单纯的只是用它作为一个载体(壳),那基本没有啥学习成本,10分钟就可以做好一个应用,如果你的应用更倾向于qq、微信那样的客户端,这个就有一定的学习成本,但是通过系统学习还是容易攻克的。
3.版本更新快
因为是基于Chromium的,所以Electron跟随Chromium的版本发布节奏,版本迭代较快,这可能会导致一些兼容问题,但幸运的是目前Electron的核心功能一直都算是很稳定的。至少常用的api基本没有变过,我用2018年写的程序,安装最新的electron版本,基本不用怎么修改就可以跑起来,前提是你需要关注官网,一些即将废弃和试验的api都尽可能少的使用,好处是新特性会更快使用到项目当中
4.安全问题
Electron提供给了开发人员足够的便利,同时也有一些具有风险的开关,开发者需要在开发中妥善处理,避免对应用客户带来安全隐患,开发人员需要关注安全问题。
5.性能问题。
Electron 本身是多进程、多线程的框架,但 JavaScript 是单线程运行的,如果产品的需求中有大量CPU 消耗性的需求,那么不应该在 Electron 内使用 JavaScript 来实现这些需求,而应该使用 Node.js 的原生模块来实现这些需求。与其说这是一个 Electron 的不足,不如说这是 JavaScript 的不足。
除了以上这些问题外,Electron 还不支持老版本的 Windows 操作系统,比如 Windows XP,在中国还有一些用户是使用 Windows XP 的,开发者如果需要面向这些用户,应该考虑使用其他技术方案了。