第01课:Electron 开发的优点

1.1 Node.js,一个让 JavaScript 从丑小鸭变成白天鹅的框架

可能不少读者会感到奇怪,本系列课程主要介绍的是 Electron,为何一开始要提到 Node.js 和 JavaScript 呢?它们是什么关系呢?别急,听我慢慢道来。前端

相信作 JavaScript 开发的读者对 Node.js 不陌生,Node.js 诞生于 2009 年,相似于 ASP.NET,是用来开发服务端程序的框架,使用的编程语言是 JavaScript。基于 Node.js 的 Web 框架很是多,比较经常使用的有 Express,还有 hapi.js,可能有些读者对 hapi.js 感到陌生,这个框架在国内用的比较少,不过在国外比较流行,hapi.js 是沃尔玛技术团队开发的框架,比较适合作 API 服务。编程

Node.js 给许多开发者的第一印象是用来开发 Web 应用的,然而事实上,正是因为 Node.js 的存在,JavaScript 才摘下了“只能开发 Web 应用”的帽子。Node.js 使得 JavaScript 能够像 Python、Java 同样在终端(或 Windows 命令行)执行,它还提供了大量的 API,利用这些 API,JavaScript 几乎能够作任何事情。从这个角度看,Node.js 算是成就了 JavaScript,帮助 JavaScript 从一个只能开发 Web 前端应用的编程语言一跃成为全栈开发的超一流语言。小程序

Node.js 支持扩展功能,这些扩展成为模块,模块能够直接使用 JavaScript 编写,也可使用 C++、Go 等语言在本地编写。目前已经有不少依赖 Node.js 的第三方模块和框架,造成了一个以 Node.js 为核心的庞大生态系统。在这个生态系统中,有一个分类就是用来开发桌面应用,成为了桌面 GUI,比较著名的包括 NW.js 和 Electron,其中,Electron 更有名气,连微软都使用 Electron 开发本身的 IDE——著名的 Visual Studio Code。此外,用 Electron 开发的应用还有不少,如 Atom、支付宝小程序 IDE(蚂蚁开发者工具)等。Electron 最初是由 GitHub 开发并负责维护的,后来 GitHub 被微软收购了,所以 Electron 如今背后的大树是微软。api

下图是 Visual Studio Code:浏览器

19717b10-a3ac-11e8-99c1-bd24c427c523

下图是蚂蚁开发者工具:安全

b7f21c40-a3ac-11e8-99c1-bd24c427c523

至此,也许不少读者会有新的疑问,为何要开发跨平台的桌面应用?为何用 Node.js 和 Electron 来开发呢?如今已经有不少流行的桌面应用开发工具,如微软的 Visual Studio、跨平台的 QT、Mac 平台 XCode。其实在使用 Node.js 和 Electron 以前,我也有这个疑问,下面就来回答一下。服务器

1.2 从桌面应用到 Web 应用,再回到桌面应用

20 年前(大约 2000 年先后),绝大多数软件都以桌面应用的形式存在,像 Word、Excel 就属于典型的桌面应用,双击桌面的图标就能够运行。这些桌面应用在发售时通常会使用光盘(CD 或 DVD),将光盘放在精美的包装盒里,而后经过各大软件商店(有线下实体店)销售,由于那时互联网还不发达,并且网速极慢,因此只能经过线下方式销售软件。在购买软件时,要确保软件能够兼容本身的操做系统(那时候大多数人使用的是 Windows 操做系统),而后从包装盒中取出光盘,将光盘中的软件安装到本身的计算机中。网络

随着时代的发展,改变也渐渐开始了。互联网的逐渐普及、网速的不断提升、网络访问愈来愈便捷、Web 浏览器的崛起,这些改变都在不断释放一个信号:传统的靠光盘分发软件的方式已经再也不符合时代的要求,人们须要更快捷、更方便、成本更低、更容易升级和维护的方式分发软件。依如今的眼光看,毫无疑问,Web 应用知足全部的要求,幸运的是,十多年前的 IT 从业者也是这么想的,因而 Web 应用也逐渐火爆起来。框架

Web 应用看似获胜,然而随着移动设备的兴起,又一轮变革开始了。开发者们发现,须要让他们的产品也支持这样的设备,以 iOS 和 Android 原生应用为表明的潮流开始引领世界。编程语言

纵观十多年的软件开发进程,业界发生了巨变,多平台的时代正在慢慢来临:桌面应用、Web 浏览器、移动端以及其余平台,做为开发者,咱们渐渐以为,有必要支持多平台计算。

那么桌面应用呢?桌面应用已经成为咱们在平常生活中使用的计算平台之一,自从二十一世纪以来,发生了不少变化。在不少年前,微软的 Windows 系统是 PC 操做系统领域绝对的霸主,后来苹果公司的操做系统(Mac OS X),以它的创新性和专业性,削弱了 Windows 的统治地位。不只如此,在 2016 年第一季度,谷歌的 Chromebook 成为全美最畅销的笔记本电脑,或许属于 Linux 系统的时代也将会来到。关键是如今你已经不能只开发支持 Windows 系统的应用了,还要开发支持苹果系统和 Linux 的应用。

跨平台的桌面应用并非什么新鲜的东西,像 Mono、QT、Java 等早就能够开发出支持多个主流操做系统的桌面应用了。一般,有 C++、C#、Java 开发经验的开发者会选择这样的技术来开发跨平台应用,但对于 Web 开发者,面对这些技术须要从新学一门语言,所以开发跨平台桌面应用对于 Web 开发者是有必定门槛的。

自从 Electron 出来后,这种状况有了很大的改观。Electron 可让你重用 Web 应用的代码来构建桌面应用,不只如此,构建出来的应用能够同时在 Windows、Mac OS X 和 Linux 上运行,这有一个很是大的好处:代码和技能均可以复用,而且释放了一拨新的应用。

除此以外,Node.js 的流行也意味着开发者们在构建他们的桌面应用时也能够受益于 Node.js 巨大的开源生态系统。Node.js 和 Web 开发者们均可以快速构建桌面应用,并且有些应用还真的很不错,好比,我如今常常用的 VS Code 就是一款很是不错的桌面应用。

支持多种操做系统,而软件自己可使用 JavaScript 编写,这个能力能够带来很是多的好处。正如前面提到的,尽管新的移动计算平台正在崛起,可是 PC 至今仍然是人们经常使用的,这也是为何使用 Node.js 构建桌面应用正变为一种有意思的分发软件的方式。

Electron 桌面应用相对于 Web 应用的优点有哪些呢?

2.1 Web 应用为何会火

在讨论 Electron 桌面应用相对 Web 应用的优点以前,先来看一下 Web 应用为何会火?

Web 应用之因此会火,主要有以下几个缘由:

  • 网速的提高,以及使用互联网的成本愈来愈低,使得相比其余通讯渠道,互联网的使用人口基数正在大规模增长;
  • Web 浏览器受益于不断加重的竞争, IE 以外的浏览器不断出现,这些浏览器拥有的新特性,继而让 Web 应用也能够利用这些新特性作出一些新的东西出来;
  • 相比像 C 和 C++ 这样的底层语言,简单易学的 HTML、CSS 和 JavaScript 下降了开发者制做 Web 应用的准入门槛
  • 开源软件的崛起意味着分发和获取软件的成本大大下降,这就使得开发者哪怕只有有限的经验和经历,只要拥有对应的开发技能均可以构建他们本身的 Web 应用。

1.3 Web 应用的挑战

上面的几点缘由不难理解,对于开发者而言 Web 是一个很是重要的平台,不过如今仍是存在一些因素对 Web 应用产生了必定制约和挑战。

这些挑战主要集中在如下几点:

  • 网络不是一直可用,好比在飞机上或隧道里时,可能信号差或没有网络,这时 Web 应用就没法访问了;
  • 若是 Web 应用须要使用大量的数据,那么意味着访问 Web 应用须要向客户端传输大量的数据,这会致使 Web 页面加载速度缓慢;
  • 若是 Web 应用须要处理大文件(如大的图片或视频),先将文件上传到服务端,处理完再返回结果的作法并非一种好的解决方案;
  • 因为 Web 浏览器有安全策略,于是 Web 应用在访问本机硬件时(如摄像头、蓝牙设备等),颇有可能会受到限制;
  • 因为目前 Web 浏览器的种类很是多,没法控制用户使用哪一个 Web 浏览器访问 Web 应用,于是在开发 Web 应用时就须要尽量考虑到更多的浏览器,只要有的地方没考虑周全,就有可能会形成 Web 应用对某些浏览器不兼容的状况。

1.4 桌面应用的优势

Web 应用受限于网络和浏览器特性,在这些方面,桌面应用要优于 Web 应用,下面列出桌面应用的一些优势:

  • 启动和运行不依赖于网络;
  • 桌面应用能够即时启动,不须要等待资源从网络上下载完再启动;
  • 桌面应用能够访问计算机的操做系统和硬件资源,包括链接在计算机上的硬件设备;
  • 桌面应用能够更好地控制软件的用户体验,不须要担忧不一样浏览器处理 CSS 的规则以及哪些 JavaScript 特性是被支持的;
  • 一旦桌面应用安装到用户计算机上,就会永远在那里,它不像 Web 应用那样须要一台 Web 服务器,还须要提供一天 24 小时支持,以防 Web 服务器宕机,固然,若是 Web 服务托管商遇到问题就更糟糕了。

一般,开发桌面应用要求开发者精通像 C++、Objective-C 或者 C# 这样的语言以及像 .NET、QT、Cocoa 这样的框架。这对于不少开发者来讲,准入门槛有点高,他们极可能会放弃使用这些技术来构建桌面应用。

而 Electron 就不同,Electron 使用 JavaScript 开发桌面应用,任何 Web 开发者都很容易上手,就算不是 Web 开发者,学习 JavaScript 相对于 C++、C# 这些语言也很是容易,所以,Electron 的准入门槛很是低

到如今为止,咱们已经了解了 Electron 究竟是作什么的,以及为何要用 Electron 来构建桌面应用,后面的内容将会全面介绍 Electron 的各类技术,并提供一个完整的实战案例,让读者结合项目来学习用 Electron 开发桌面应用。