Electron是什么以及可以做什么( 二 )


随着几十年 Web 应用大行其道,Web 前端开发领域的技术生态足够繁荣 。Electron 可以使用几乎所有的 Web 前端生态领域及 Node.js 生态领域的组件和技术方案 。目前发布到 http://npmjs.com 平台上的模块已经超过 90 万个 , 覆盖领域广、优秀模块繁多且使用非常简单方便 。
在完成 Web 前端开发工作时,开发者需要考虑很多浏览器兼容的问题,比如:用户是否使用了低版本的 IE 浏览器,是否可以在样式表内使用 flexbox 弹性盒模型等问题 。最终会导致前端开发者束手束脚,写一些丑陋的兼容代码以保证自己的工作能在所有终端表现正常 。但由于 Electron 内置了 Chromium 浏览器 , 该浏览器对标准支持非常好 , 甚至有些标准尚未通过,Chromium 浏览器就已经支持了 , 所以基于 Electron 开发应用不会遇到这些问题 。开发者的自由度得到了最大程度的保护,你几乎可以在 Electron 中使用所有 HTML5、CSS3 、ES6 标准中定义的 API 。
Electron 的原理Electron 是一个集成项目,它做了如下几个重要的工作:

  1. 订制 Chromium,并把订制版本的 Chromium 集成在 Electron 内部
  2. 订制 Node.js,并把订制版本的 Node.js 集成在 Electron 内部
  3. 通过消息轮训机制打通 Node.js 和 Chromium 的消息循环
  4. 通过 Electron 的内置模块向开发者提供桌面应用开发必备的 API
Electron 框架的内部原理图如下所示:
Electron是什么以及可以做什么

文章插图

Electron是什么以及可以做什么

文章插图
其中 Chromium 基础能力 API 可以让应用渲染开发者提供的 HTML 页面,让应用可以在 Cookie 或 IndexedDB 中存取数据 , 前端开发者都非常熟悉这些能力 。
Node.js 基础能力 API 可以让开发者读写本地磁盘的文件、通过 socket 访问网络、创建和控制子进程等,Node.js 开发者非常熟悉这些能力 。
Electron 内置模块可以让开发者创建操作系统的托盘图标、访问操作系统的剪切板、发送系统通知,同时它还提供了一系列的 API , 允许开发者使用 JavaScript 访问 Chromium 的底层能力 。
下面我们来看一下 Electron 应用的结构:
Electron是什么以及可以做什么

文章插图

Electron是什么以及可以做什么

文章插图
每个 Electron 都是由 1 个主进程、 1 个或多个渲染进程组成的,开发者的主要工作就是完成主进程的逻辑和渲染进程的逻辑 。
Electron 应用启动时,首先会加载主进程的逻辑,主进程会创建一个或多个窗口,我们暂时可以粗浅的认为一个窗口就代表一个渲染进程 , 主进程负责管理所有的渲染进程 。
窗口内加载的页面就是开发者要实现的渲染进程的逻辑,我们可以让渲染进程与主进程通信,他们之间是通过 IPC 消息管道进行通信的 。虽然有一些特殊的手段让两个渲染进程直接通信(后面的章节我们会介绍) , 但大部分时候还是通过主进程来中转消息以达到渲染进程间通信的目的 。
Electron 提供的一系列内置模块大部分是专门为主进程的逻辑服务的,比如 app 模块、BrowserWindow 模块和 session 模块等,少量模块是专门为渲染进程的逻辑服务的,比如 ipcRenderer 模块、webFrame 模块等,只有少量模块是两个进程可以同时使用的,比如:clipboard 模块、desktopCapturer 模块等 。我们应该清楚这些模块的势力范围 , 不能在主进程中使用渲染进程的模块,反之也不行 。
Electron 的不足基于 Electron 开发桌面 GUI 应用并不是完美的方案,它也有它的不足 , 综合起来说有以下几点:
第一:打包后的应用体积巨大
一个功能不算多的桌面应用,通过 electron-builder 压缩打包后至少要 50M 。而且如果开发者不做额外的 Hack 工作的话,用户每次升级应用程序,还要让用户再下载一次同样体积的安装包 。这对于应用分发来说是一个不小的负担 。但随着网络环境越来越好,用户磁盘的容积越来越大,此问题给用户带来的损失会慢慢被削弱 。
第二:版本发布过快
为了跟进 Chromium (和 Node.js) 的版本发布节奏 , Electron 也有非常频繁的版本发布机制,每次 Chromium 的改动 , 都可能导致 Electron 冒出很多新的问题,甚至稳定版本都有很多未解决的问题 。好在关键核心功能一直以来都是稳定的 。

推荐阅读