Electron 如何工作?
Electron 工作原理:主进程与渲染进程
Section titled “Electron 工作原理:主进程与渲染进程”Electron 的架构基于一个多进程模型,类似于现代 Web 浏览器,如 Chromium。理解这个模型对于有效开发 Electron 应用至关重要。
当你启动一个 Electron 应用时,它会启动一个主进程(Main Process)。这个进程是唯一的,充当整个应用程序的入口点和控制器。package.json 文件中定义为 "main" 的脚本由主进程执行。
主进程负责:
- 创建和管理应用程序窗口(
BrowserWindow实例)。 - 与操作系统的原生 GUI 交互(例如,创建菜单、对话框、系统托盘图标)。
- 处理应用程序生命周期事件(例如,启动、退出)。
- 执行需要操作系统级别访问或 Node.js API 的操作(如文件系统访问、网络请求或运行子进程)。
- 协调应用程序不同部分之间的通信。
主进程本身不渲染任何可见的用户界面。为了显示 UI,主进程会创建渲染进程(Renderer Processes)。它创建的每个 BrowserWindow 实例都运行一个独立的渲染进程。渲染进程负责在其窗口内渲染 Web 内容(HTML、CSS、JavaScript)。
渲染进程的主要特点:
- 每个渲染进程彼此独立,也独立于主进程。
- 它们本质上是嵌入式的 Chromium 浏览器实例。
- 出于安全原因,渲染进程(尤其是在使用了现代默认设置如
contextIsolation: true和nodeIntegration: false的情况下)无法直接访问 Node.js API 或敏感的 Electron API。它们必须通过进程间通信(IPC)与主进程通信来请求此类操作。 - 如果一个渲染进程崩溃,通常不会影响主进程或其他渲染进程,这增强了应用程序的稳定性。
主进程与渲染进程的区别总结
Section titled “主进程与渲染进程的区别总结”主进程:
- 每个应用程序一个。
- 管理应用程序生命周期和原生操作系统交互。
- 创建和管理
BrowserWindow实例(以及由此产生的渲染进程)。 - 拥有完整的 Node.js API 访问权限和 Electron 仅限主进程使用的模块。
- 没有直接的 UI 渲染能力(它协调有渲染能力的窗口)。
渲染进程:
- 每个
BrowserWindow(网页)一个。 - 负责在其窗口内渲染 HTML、CSS 并执行 JavaScript 来显示 UI。
- 默认情况下是独立的和沙盒化的,以确保安全。
- 通过主进程的 IPC 机制(通常使用预加载脚本)间接访问 Node.js 或操作系统功能。
- 可以有多个,取决于你的应用打开了多少个窗口。
这种关注点分离是 Electron 设计的基础。主进程充当具有特权的后端,而渲染进程在一个更受限制的环境中处理用户界面。它们之间的通信通过 Electron 的 IPC 机制(ipcMain 和 ipcRenderer)实现。