快速了解Electron:新一代基于Web的跨平台桌面技术

现在开发IM应用动不动就要求多端——即Android端、iOS端、PC端、Web端等,Android端和iOS端作为两种不同的移动端技术,单独开发和维护还能理解,PC端和Web端如果要单独开发那就有点头大了,必竟开发传统的PC桌面应用成本太高(QT这类技术跟Web技术相比,上手难度大的多,而且太小众)。所以,很大情况下大家都是PC富客户端和Web端二选一,对于比较磨叽的老板、产品经理或客户来说,这是个很费口舌的事情(你懂的。。。)。

在即时通讯网的官方技术群里不只一次看到大家在讨论Electron技术,作为新一代基于Web的桌面技术,已经被越来越的产品采用,成熟度和认可度都不错,Electron技术可以降低开发PC端的成本和难度,或许PC富客户端和Web端再也不需要二选一了。

本文将从入门者的角度,为你快速讲解Electron到底是个什么技术,包括案例介绍、技术优势、技术体验、实现原理等。

桌面应用程序,又称为GUI程序(GraphicalUserInterface),但是和GUI程序也有一些区别。桌面应用程序将GUI程序从GUI具体为“桌面”,使冷冰冰的像块木头一样的电脑概念更具有人性化,更生动和富有活力。

我们电脑上使用的各种客户端程序都属于桌面应用程序,近年来WEB和移动端的兴起让桌面程序渐渐暗淡,但是在某些日常功能或者行业应用中桌面应用程序仍然是必不可少的。

传统的桌面应用开发方式,一般是下面两种。

1)原生开发:

直接将语言编译成可执行文件,直接调用系统API,完成UI绘制等。这类开发技术,有着较高的运行效率,但一般来说,开发速度较慢,技术要求较高,例如:

a.使用C++/MFC开发Windows应用;

b.使用Objective-C开发MAC应用。

2)托管平台:

一开始就有本地开发和UI开发。一次编译后,得到中间文件,通过平台或虚机完成二次加载编译或解释运行。运行效率低于原生编译,但平台优化后,其效率也是比较可观的。就开发速度方面,比原生编译技术要快一些。例如:

a.使用C#/.NETFramework(只能开发Windows应用);

b.Java/Swing。

不过,上面两种对前端开发人员太不友好了,基本是前端人员不会涉及的领域,但是在这个'大前端'的时代,前端开发者正在想方设法涉足各个领域,使用WEB技术开发客户端的方式横空出世——这就是本文正在介绍的“Electron”技术。

Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。通过Node它提供了通常浏览器所不能提供的能力。

Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来(PS:据说这个Atom看起来很漂亮,但很难用...)。这两个项目在2014春季开源。

其实,Electron在早期一直是由原作者ChengZhao一个人维护和开发的(他现在是Github北京Atom编辑器开发team的一名工程师)。在这之前,Zhao主要进行node-webkit(现在叫nw.js)的开发工作。从概念上,Electron与nw.js很相似,但是他们有很重要的区别:一个主要的不同点是Electron通过GooglesChromiumContentModule来使用Chromium的功能,nw.js则直接使用了Chromium本身。

PS:Electron的作者ChengZhao应该是个中国人,但网上能查到的信息非常少,连中文名都没有(大佬就是低调...),这个框架作者还为一本中文译名叫《跨平台桌面应用开发:基于Electron与NW.js》的书写了序(见下图)。

Electron发展历程中的里程碑:

目前它已成为开源开发者、初创企业和老牌公司常用的开发工具(看看谁在使用Electron)。

Electron资源:

可能主要是因为,猿类里的亚种——“前端开发”,又有了新的出路了吧,已经在岗的前端也有了新一年的KPI/OKR,刚起步的创业公司可以只拉一个前端就能开发跨平台的多个桌面客户端......(开个玩笑)。

1)可以用Web前端技术开发跨平台的桌面客户端:

这是Electron最迷人的地方,究其根本是因为它是建立在Chromium和NodeJS之上的,一个负责界面,一个负责背后的逻辑,典型的'你负责貌美如花,我负责赚钱养家',为什么Electron能够开发跨平台的桌面应用也就可以理解了。

而对于前端开发来说,“不要和老夫说什么C++,Java,老夫行走江湖就一把JS,遇到需求就是干”。前端开发可以用自己熟悉的方式去写应用界面,逻辑部分也还是JS,如果你精通Node后端,那后端也可以插一脚,“鸟枪换大炮”,你开发客户端的能力有一种“忽如一夜春风来”的感觉。

但是,不同系统间还是会有很大的不同,“同一套代码,编译出跨平台的多个客户端”,话是这么说,但你得因为系统的不同做一些额外的处理,以使得打包出的不同系统下的应用都可以正常工作,这可能是一些“if-else”的成本,但相比于那80%都能完全复用的代码,这些成本已经很小了。

综上所述:一个Web前端开发者可以花很少的成本去上手Electron,而相比于以前开发多平台客户端的成本,利用Electron开发多平台客户端的成本是极低的。

2)可以从NodeJS的生态获得极大的助力:

Electron从NodeJS获益有2个方面,一个方面是如现代的web项目一般,开发构建流程可以引入很多成熟的包去打造出适合自己项目的开发工作流,另一个方面就是其应用本身也可以依赖需要的包去完成自己的功能。

3)“这个东西做Web版就可以,干吗还要开发PC客户端版?”

既然Electron是用Web技术写客户端,那么看上去Electron要做的事,可以搬到网站上。

为什么还要搬到PC客户端,这里有3个角度的回答:

a.用户角度:客户端是一款独立的软件,其综合体验一般都是比网站高的,尤其是涉及到「工具」范畴的应用,此外,特定的用户群体也会有类似的使用习惯;

b.发行方角度:客户端是另一种产品形式,是一种产品的分发方式和入口,客户端可以实现很多本地应用独有的需求去触达用户,也能提供更加可靠的服务;

c.开发角度:终于...不用考虑浏览器兼容了,Chromium也足够开发使用一些先进的CSS或JS特性,我们现在还没计划引入webpack和babel,因为现在好像够用,克制才是爱,除了写起来爽,对于开发来说,终于跳出了浏览器的沙盒,你可以自己去控制Electron中的“浏览器”,莫名的开心。

这些综合起来回答这个小节的问题就是,用Electron开发客户端,用户体验好,开发麻烦小,功能更强大,老板脱发少。

4)那在Electron和NW.js之间,为啥选择前者?

所以,生态更好一些,我选择了Electron。

5)总结一下,使用Electron开发的理由:

a.使用具有强大生态的Web技术进行开发,开发成本低,可扩展性强,更炫酷的UI;

b.跨平台,一套代码可打包为Windows、Linux、Mac三套软件,且编译快速;

c.可直接在现有Web应用上进行扩展,提供浏览器不具备的能力;

d.你是一个前端~

当然,我们也要认清它的缺点:性能比原生桌面应用要低,最终打包后的应用比原生应用大很多。

兼容性:虽然你还在用WEB技术进行开发,但是你不用再考虑兼容性问题了,你只需要关心你当前使用Electron的版本对应Chrome的版本,一般情况下它已经足够新来让你使用最新的API和语法了,你还可以手动升级Chrome版本。同样的,你也不用考虑不同浏览器带的样式和代码兼容问题。

NodeJS环境:这可能是很多前端开发者曾经梦想过的功能,在WEB界面中使用Node.js提供的强大API,这意味着你在WEB页面直接可以操作文件,调用系统API,甚至操作数据库。当然,除了完整的NodeAPI,你还可以使用额外的几十万个npm模块。

跨域:你可以直接使用Node提供的request模块进行网络请求,这意味着你无需再被跨域所困扰。

现在市面上已经有非常多的应用在使用Electron进行开发了,包括我们熟悉的VSCode客户端、GitHub客户端、Atom客户端等等。

印象很深的,去年迅雷在发布迅雷X10.1时的文案:

从迅雷X10.1版本开始,我们采用Electron软件框架完全重写了迅雷主界面。使用新框架的迅雷X可以完美支持2K、4K等高清显示屏,界面中的文字渲染也更加清晰锐利。从技术层面来说,新框架的界面绘制、事件处理等方面比老框架更加灵活高效,因此界面的流畅度也显著优于老框架的迅雷。至于具体提升有多大?您一试便知。

你可以打开VSCode,点击“帮助”-“切换开发人员工具”,来调试VSCode客户端的界面:

Electron的官网还列举了更多案例:看看谁在使用Electron。

如上图所示,Electron结合了Chromium、Node.js和用于调用操作系统本地功能的API。

1)Chromium:

Chromium是Google为发展Chrome浏览器而启动的开源项目,Chromium相当于Chrome的工程版或称实验版,新功能会率先在Chromium上实现,待验证后才会应用在Chrome上,故Chrome的功能会相对落后但较稳定。

Chromium为Electron提供强大的UI能力,可以在不考虑兼容性的情况下开发界面。

2)Node.js:

Node.js是一个让JavaScript运行在服务端的开发平台,Node使用事件驱动,非阻塞I/O模型而得以轻量和高效。

单单靠Chromium是不能具备直接操作原生GUI能力的,Electron内集成了Nodejs,这让其在开发界面的同时也有了操作系统底层API的能力,Nodejs中常用的Path、fs、Crypto等模块在Electron可以直接使用。

3)系统API:

为了提供原生系统的GUI支持,Electron内置了原生应用程序接口,对调用一些系统功能,如调用系统通知、打开系统文件夹提供支持。

在开发模式上,Electron在调用系统API和绘制界面上是分离开发的,下面我们来看看Electron关于进程如何划分。

Electron核心可以分成2个部分:主进程和渲染进程。

主进程连接着操作系统和渲染进程,可以把她看做页面和计算机沟通的桥梁。渲染进程就是我们所熟悉前端环境了,只是载体改变了,从浏览器变成了window。

传统的Web环境我们是不能对用户的系统就行操作的,而Electron相当于NodeJS环境,我们可以在项目里使用所有的nodeapi(Electron的作者相当机智...)。

简单理解:给Web项目套上一个NodeJS环境的壳,就是Electron技术。

项目结构:相比web项目,桌面项目多了一个进程,如下图所示。

项目迁移:如果要迁移项目到Web端,就需要把项目中的Electron提供的API和NodeJS的API完全剥离出来,只能遗留Web的代码,比如nodefs模块,Electron提供ipc模块,都需要剥离。如果你一开始就打算双端程序,在开始写代码时应该对Web代码和Elecctron的代码进行分离,以便后期的迁移。

最后说一些可以帮助你更好学习electron的基础知识:

1)Webpack:最强构建工具,没有之一,了解webpack,你才能更好编写项目配置;

2)NodeJS:Electron是搭载谷歌v8内核的高性能的NodeJS环境,所有NodeJS能用的东西,我们都能用。是不是很酸爽?

Web即时通讯新手入门贴:

《新手入门贴:详解Web端即时通讯技术的原理》

Web端即时通讯技术盘点请参见:

《Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE》

关于Ajax短轮询:

找这方面的资料没什么意义,除非忽悠客户,否则请考虑其它3种方案即可。

有关Comet技术的详细介绍请参见:

《Comet技术详解:基于HTTP长连接的Web端实时通信技术》

《WEB端即时通讯:HTTP长连接、长轮询(longpolling)详解》

《WEB端即时通讯:不用WebSocket也一样能搞定消息的即时性》

《开源Comet服务器iComet:支持百万并发的Web端即时通讯方案》

更多WebSocket的详细介绍请参见:

《新手快速入门:WebSocket简明教程》

《WebSocket详解(一):初步认识WebSocket技术》

《WebSocket详解(二):技术原理、代码演示和应用案例》

《WebSocket详解(三):深入WebSocket通信协议细节》

《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》

《WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)》

《WebSocket详解(六):刨根问底WebSocket与Socket的关系》

《理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性》

《Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架》

THE END
1.十大学习网站排名网上学习平台哪个好在线网络学习网站推荐→近年来,网络学习环境在网络接入性、学习支持服务方面表现优异,整体发展水平得到质的提升,已成为流行趋势。本文中maigoo网编辑为广大学子盘点了中国大学MOOC、Coursera、慕课网、网易公开课、EdX、学堂在线、TED、大学资源网、腾讯课堂等较受欢迎的网络学习平台,一起了解下这些学习网站的优势! 排排榜 关注榜 点赞榜 https://www.maigoo.com/top/420080.html
2.六年级上册语文第四单元教案(精选14篇)2、写好一项活动,有什么条件?学习第二自然段(亲自参加,留意观察) 3、习作时,要注意什么? 1)、要把活动过程分解成几个步骤? 2)、写清每一步同学们怎样活动,自己是怎样参加的?(抓住活动中人物的神态、语言、动作、及心理活动) 四、选材定题,拟好提纲 https://www.fwsir.com/jiaoan/html/jiaoan_20231207122032_3495820.html
3.注会免费视频课哪里有?备考看网课是浪费时间吗?考生备考注会的免费课程视频获取途径是比较多的,例如:B站、慕课、超星教育、大学网站上的公开课等平台上共享的一些会计、审计、财务成本管理等相关课程,大家有时间都可以进去看看。相比之下,考生在学习注会各科目的考试内容的同时,配合网课一起进行学习,在教材知识的https://m.gaodun.com/cpa/1270794.html
4.高中课程免费教学网站有什么推荐(高中最好的十个网课平台)关于高中网课平台哪个好 怎么选择,相信大家已经有答案了,最后再说一下,孩子的学习就跟我们的工作一样,都需要科学的方法和专业的指导,做学习规划和指导是宜早不宜晚。http://www.xxwdw.com/news-id-12955.html
5.初中学生家长教育孩子的心得体会范文(通用12篇)“人生聪明写字始”,写好汉字是国人接触中国文化的开始,也是终生学习与发展的一种必备技能。早在1962年,郭沫若就在《人民教育》杂志上题词说:“培养中中学生写好字,不一定要人人都成为书法家,总要把字写得合乎规格,比较端正、干净、容易认。”具体到中学生来说,“正确、端庄,行款整洁”“有一定的速度”是国家新https://www.yuwenmi.com/fanwen/xinde/3346671.html
6.2024安全教育平台网址是什么2024安全教育平台网址是什么 中小学生登录安全教育平台学习安全教育知识,秋季暑假来了,学校和教师要做好安全第一课的教育,中国学校安全教育平台就是可以让学生更多的安全知识的平台,下面是小编整理的关于2024安全教育平台登录入口,欢迎大家使用自己账号和密码在线登录! https://www.yjbys.com/jiuyezhidao/news/1182369.html
7.8个国外在线学习网课的网站综合考虑,最好的在线学习平台是什么? 下面我们就来看一些比较知名的网络学习平台。这些平台基本都是美国的网课平台。 国外最好的网课教育平台推荐 1、Udemy 网址:https://haiwaisky.com/go/udemy 最物有所值的网课平台Udemy 拥有成千上万的软技能和硬技能课程,您可以根据自己的需求和时间安排自己的学习课程。 https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/117203030
8.在线教育优缺点发展前景加盟创业学生选择在线学习平台 1、首先对功能进行判断 在线教育平台系统网上一搜能出来一大堆,功能大多千篇一律,这时候选择一个有特色功能的平台就尤为重要了。 共享师资在线教育平台系统除了拥有市面上大多数平台拥有的功能外,还拥有在线协议签署,在线课程答疑,分销管理等实用功能。 https://www.cnpp.cn/focus/14126.html
9.你想要的资源我都有——大学生居家学习“秘籍”居家上网课自然少不了各类学习平台的帮助,你们的老师都用什么平台给你们上课呢?小编这里有几个好用的学习平台,强烈安利给你们(当然你们用来找同学朋友组群群聊K歌也是可以的)。 Zoom:可以进行多人高清视频会议的平台,画质流畅 QQ语音通话:老师在QQ群里发起语音通话后可以实时分享屏幕,方便教学 https://cpsy.ccnu.edu.cn/info/1122/1919.htm
10.高中在线学习哪个网站好比较好的高中在线学习网站比较好的高中在线学习网站 简单学习网高中视频资源 高一至高三等课程,多科联报更优惠! 免费试听查看 学而思网校:好未来教育集团旗下发展历史较久的高中在线教育品牌,也是国内较早整合“互联网”与“教育”两大领域的中小学在线学习平台之一。该平台采用“直播+辅导”的双师直播教学模式,并引入AI技术辅助教学,如表情识别https://3g.thea.cn/wx_571624.html
11.11个好用的自学平台推荐关于学习,如果清楚自己要学什么,百度一下想学的东西的比较好的教程,当然有很多是收费的,按照我以前写过的文章介绍的如何搜索收费资源,99.99%的资源都能在强大的互联网中找的到。 如果不知道学什么,但有时间学习而且想学,以上平台都是你的好去处,最后再加一个B站推荐给大家。最怕优秀的你比别人更努力。 https://www.douban.com/note/706751345/
12.看了800多份简历和作品集,我总结了这份求职避坑指南虽然现在的设计网站很多,可以通过很多平台学习,但是也不要天真的认为你在大海中拿的那一颗石子别人会不知道,不要低估现在互联网的发达程度,作为同样的行业,你在看别人也同样在看,如果不是同行业的人看你的作品,估计还是比较难发现的,就可以逃过一劫,但是最好还是不要抱着这种侥幸的心理。 https://www.uisdc.com/career-guide-for-designers
13.国家开放大学一网一平台学生学习网学习指南问答答:根据国开文件精神,2022年9月所有学生的学习都在一网一平台学习,网址:http://one.ouchn.cn 20.我已经在网上学习了一段时间了,但是学习分析中依然没有数据? 答:因为数据服务器需要同步,一般需要1-2天时间才能同步。 21.网上学习好的学生是否进行评优,评优的标准是什么? http://shanglinfx.xartvu.sn.cn/info/1030/1324.htm
14.天天心理网课表已出炉, 大咖云集, 将带领学员开启为期三年的学习之旅。 在1879计划的三年里, 可以探索浩瀚的精神世界, 可以领略规范的咨询专业, 也可以结交同窗挚友, 见证彼此的成长, 成为一生的财富。 尚有少量名额, 先报名者优先录取。 1879计划中国心理咨询师继续教育标准建设项目 10月1日,七期班即将开学 开班地点:上海https://www.mypsy365.com/projectteam/number