Electron 基础
官方文档已经写的比较全了,所以并不会每个知识点都出现。
Electron 的主从进程模型是基本的常识。每个 Electron 应用有且只要一个主进程(Main Process)、以及一个或多个渲染进程(Renderer Process), 对应多个 Web 页面。更多更完整的请查看官方文档。
项目最小组成:
多进程模型
Electron 继承了来自 Chromium 的多进程架构,这使得此框架在架构上非常相似于一个现代的网页浏览器。electron 框架的机制是把主进程和渲染进程分开的,所以这就导致了 electron 项目通常也是把主进程和渲染进程分开处理。所以我们在查阅一些相关的开源项目的时候,为了方便项目管理通常会发现:
- 大部分项目处理自身 electron 主进程相关的内容会放在一个独立的文件夹里,比如,main。
- 而另外渲染页面及处理页面逻辑的内容也是放在一个独立的文件夹,比如,render。
可以发现,主线程和渲染线程都集成了 Native API 和 Node.js,渲染线程还集成 Chromium 内核,成功实现跨端开发。
PS:调试信息,主进程的只会在编辑器里控制台显示。
主进程
任何 Electron 应用程序的入口都是 main 文件。这个文件控制了主进程,它运行在一个完整的 Node.js 环境中,负责控制您应用的生命周期,显示原生界面,执行特殊操作并管理渲染器进程。主进程在 Node.js 环境中运行,这意味着它具有 require 模块和使用所有 Node.js API 的能力。一个 Electron 应用有且只有⼀个主进程。
执行期间,Electron 将依据应用中 package.json 配置下 main 字段中配置的值查找此文件。即 main 字段对应的文件 即为主进程的入口文件,基于主进程后再执行渲染进程。
主进程的主要目的是:
- 创建渲染进程,使用 BrowserWindow 模块创建和管理应用程序窗口。一个 BrowserWindow 里又可以承载多个 BrowserView。
- 管理原生 GUI,典型的窗口(BrowserWindow、Tray、Dock、Menu)等
- 控制应用生命周期
窗口管理
BrowserWindow 类的每个实例创建一个应用程序窗口,且在单独的渲染器进程中加载一个网页。您可从主进程用 window 的 webContent 对象与网页内容进行交互。
由于 BrowserWindow 模块是一个 EventEmitter,所以您也可以为各种用户事件(例如,最小化或最大化您的窗口)添加处理程序。
当一个 BrowserWindow 实例被销毁时,与其相应的渲染器进程也会被终止。
应用程序生命周期
主进程还能通过 Electron 的 app 模块来控制您应用程序的生命周期。该模块提供了一整套的事件和方法,可以使你添加自定义的应用程序行为(例如:以编程方式退出您的应用程序、修改程序坞或显示关于面板)。
渲染进程
每个 Electron 应用都会为每个打开的 BrowserWindow(与每个网页嵌入)生成一个单独的渲染进程。洽如其名,渲染器负责渲染