什么是Electron
系列文章
一、什么是Electorn
简单来说,Electron就是一个跨平台桌面应用程序开发框架。类似的框架很多,比较大众一些的有Qt、GTK和wxWidgets。这三个框架都是用C/C++语言开发的。
其中,Qt属于开源与闭源混合的框架,它既有开源版本,也有商业版本。如果是开源软件使用其开源版本是没有问题的,但是,如果是商业软件最好还是需要使用商业版本,否者可能存在版权风险。不过,Qt的设计是非常优秀的,其信号槽的设计大大降低的GUI界面软件的设计难度。与其说它是一套GUI框架,不如说它是一个大型桌面软件设计库,其中不仅仅包含了基础库和控件库,还包含了大量的高级库,如网络通信相关、浏览器的封装、电子表格、XML和SQL等模块。使用它不仅仅可以开发桌面软件,甚至还可以开发安卓和iOS软件。使用它可以比较轻松的设计出功能强大的性能优秀且外观优美的软件。如果不差钱或者开源,Qt其实是非常不错的跨平台开发框架。使用它开发的软件非常多,比WPS、VLC、VritualBox、Skype、KDE等等。
GTK和wxWidgets是纯开源版本,不存在商业版本。他们都使用了LGPL协议,只要不修改源码,是可以商业使用的。但是,GTK的文档比较匮乏,很多接口因为没有很好的说明导致必须阅读源码才能知道其用途。导致开发软件的难度比较高。不过,使用它开发的软件还是很多的,比如GIMP、GNOME等等。在Linux下大量基于GTK开发的软件,而且其协议对于商业软件相当友好。功能强大,性能也非常好,唯一的不足就是文档偏少。如果使用C++开发跨平台桌面软件,也是一个非常好的选择。
wxWidgets的设计就比较糟糕了。它诞生的比较早,当年还是MFC流行的时代,它的设计跟MFC有七分神似。它的做法比较讨巧,它没有想GTK或者Qt实现自己的控件库,而是直接封装原生平台的控件库,将各个平台的控件库封装出一个相同的接口出来。使用它写的程序,在哪个平台就是哪个平台的风格,而且它取了各个平台的公共集,导致开放出来的接口比较少,这导致这个框架的灵活度大大降低。想要用它开发出一个复杂交互逻辑的软件是非常困难的。所以,从1992年第一次发布以来,已经三十多年了,依旧没有哪个大型软件是使用wxWidgets开发的。
当然,还有很多不太出名的框架,如fltk、Tcl/Tk之类的,不仅仅是库本身比较轻量级,文档也相当匮乏,而且用的人也非常的少。
相对的这些老牌的跨平台开发框架,Electron是比较新的框架。2016年才发布第一个版本。不过,短短的几年,其成就已经远超那些几十岁“大叔”甚至“爷爷”级的框架。使用它设计的软件非常多,比如Visual Studio Code、新版QQ、网易云音乐等等。与C++的那些跨平台框架不同,它没有实现控件库,也没有实现各种跨平台的功能库。简单来说,它把Node.js从服务器端搬到了桌面端,然后,让浏览器来做UI,借助H5的各种框架来实现界面逻辑。使用Node.js提供JavaScript运行时环境,并提供事件驱动和非阻塞的I/O模型,同时,再补充一些桌面系统相关的接口,如托盘图标、对话框、进程管理、电源管理、任务栏等等接口。也就是说,Electron=Node.js+Chromium+NativeAPI。正是因为它站在了这些“巨人”的肩膀上,所以,短短几年就已经成为非常流行的跨平台开发框架。也正是因为它是站在这些“巨人”的肩膀上的,它也存在很多无法解决的先天性问题,比如用它开发的软件都是体积庞大,运行效率偏低,内存消耗也比较大。
其实,新的跨平台框架不仅有Electron,还是Google开源的Flutter。它也是一个对商业非常友好的开源框架。它的诞生比Electron更晚一些。2018年底才发布第一个版本。与Electron不同的是,它没有使用浏览器,而是采用类似于Qt和Gtk的方式,自己实现了一套控件库。不过,它更加彻底,它不仅仅实现了自己的控件库,还实现了自己的图形渲染引擎。它的控件都是运行在自己的图形渲染引擎之上的。另外,它还集成了Dart编程语言。相对于C/C++,Dart要容易的多,而且Dart是编译型语言,性能又比JavaScript这类解释型语言要高的多。所以,使用Flutter设计的软件,不仅性能强大,而且体积也比较小,内存使用也不大。除了一开始的学习成本有些高之外,简直是最完美的解决方案。不过,因为它是商业公司主导的开源框架,比较容易收到Google的影响。一旦Google停止开发,对于Flutter来说,几乎是毁灭性打击。还有一点需要说明的是Flutter不仅仅可以用来设计桌面软件,更是可以用来开发移动软件和Web软件。其实,它最初就是用来实现跨Android和iOS移动平台的框架,后来才扩展到了Windows、Linux、MacOS和Web。它也是迄今为止,跨平台最多的框架,没有之一。