Electron是什么以及可以做什么

新用户购买《Electron + Vue 3 桌面应用开发》,加小册专属微信群 , 参与群抽奖 , 送《深入浅出Electron》、《Electron实战》作者签名版 。
  • 1等奖:《深入浅出Electron》+《Electron实战》
  • 2等奖:《深入浅出Electron》
  • 3等奖:《Electron实战》
抽奖活动是掘金组织的,仅限近几日加入微信群的新成员(目前人还不多) , 我负责抽奖、邮寄,11月20日开始抽奖 。凡参与抽奖的读者都有机会中奖 。
经济学中的“有需求就有市场”,在技术领域也不例外 , Electron 是应需求而生的 , Electron 面世之后 , 非但满足了现有大部分的开发需求 , 还创造了大量的新需求 , 开辟了一个新的生态 。
本章我们从 Electron 的由来讲起,讲到需求从何而来,它是如何满足这些需求的 。
Electron 的由来如果想开发一个桌面 GUI 应用软件,希望其能同时在 Windows、Linux 和 Mac 平台上运行,可选的技术框架并不多,在早期人们主要用 wxWidgets、GTK或 Qt来做这类工作 。
这类框架大都是以 C/C++语言开发,受语言开发效率的限制,开发者想通过它们快速的完成桌面应用的开发工作十分困难 。近几年相继出现了现代编程语言针对这些框架的绑定库,诸如 Python、C#、Go 等,大部分都是开源社区提供的,但由于历史原因,要想用到这些框架的全部特性,还是需要编写 C/C++代码 。并且高质量的 Node.js 的绑定库几乎没有,前端程序员想通过这类框架开发桌面应用更是难上加难 。
Stack Overflow 的联合创始人 Jeff Atwood 曾经说过 , 凡能用 JavaScript 实现的 , 注定会被用 JavaScript 实现 。桌面 GUI 应用也不例外 , 近几年两个重量级框架 NW.js和 Electron横空出世 , 给前端开发人员打开了这个领域的大门 。
这两个框架都与中国人有极深的渊源,2011 年左右,中国英特尔开源技术中心的王文睿(Roger Wang)希望能用 Node.js 来操作 WebKit,而创建了 node-webkit 项目,这就是 NW.js 的前身 。英特尔公司大力支持了这个项目 , 不但允许王文睿分出一部分精力来做这个开源项目 , 还给了他招聘名额 , 允许他招聘其他工程师来一起完成这个项目 。2012 年,故事的另一个主角赵成(Cheng Zhao)加入到王文睿的小组,并对 node-webkit 项目做出了大量的改进 。后来赵成离开了英特尔,帮助 github 团队尝试把 node-webkit 应用到 Atom 编辑器上,但由于当时 node-webkit 还并不稳定,且 node-webkit 项目的走向也不再受赵成的控制了,这个尝试最终以失败告终 。但赵成和 github 团队并没有放弃,而是着手开发另一个类似 node-webkit 的项目:Atom Shell,这个项目就是 Electron 的前身,赵成在这个项目上倾注了大量的心血,这也是这个项目后来广受欢迎的关键因素之一,再后来 github 把这个项目开源出来,最终更名为 Electron 。
Electron 的价值Electron 和 NW.js 框架都是基于 Chromium 和 Node.js 实现的,这就使得前端程序员可以使用 JavaScript、HTML 和 CSS 知识轻松构建跨平台的桌面应用 。
传统桌面应用开发的难点,现在看来也变得异常容易 , 比如绘制漂亮的界面可以使用更灵活的 HTML 和 CSS 提供的能力、实现简单的动效可以用 CSS Animations 或 Web Animations API 来实现 。
为了弥补 Node.js 和前端技术访问系统 API 方面的不足 , 这两个框架内部都对系统 API 做了封装,比如:系统对话框、系统托盘、系统菜单、剪切板等 。开发者基于 Electron 开发应用时,可以直接使用 JavaScript 访问这些 API 。其他诸如网络访问控制、本地文件系统的访问控制则由 Node.js 提供支持 。这样开发者就可以使用前端技术开发绝大多数桌面应用的需求了 。
前端技术是现如今软件开发领域应用最广泛的技术之一 。入门门槛非常低、周边生态繁荣而且历史悠久 。相对于基于 C++库开发桌面软件来说,基于 Electron 开发更容易上手且开发效率更高 。由于 JavaScript 语言是一门解释执行的语言,所以 C++语言固有的各种问题都不再是问题 , 比如:C++没有垃圾回收机制 , 开发人员要小心翼翼的控制内存,以免造成内存泄露 。C++语言特性繁多且复杂,学习难度曲线陡峭,需要针对不同平台进行编译,应用分发困难等,使用 Electron 开发桌面应用就不用担心这些问题 。
执行效率上,如果前端代码写的足够优秀,完全可以做到与 C++应用相媲美的用户体验,Visual Studio Code 就是先例 。另外 Node.js 本身也可以很方便的调用 C++扩展,Electron 应用内又包含 Node.js 环境,对于一些音视频编解码或图形图像处理需求,可以使用 Node.js 的 C++扩展来完成 。

推荐阅读