进程模型
Electron 沿用 Chromium 的多进程结构。一个应用里长期存在一个主进程,以及若干渲染进程。需要跑重计算时,还可以再开 utility 进程。
官方《Process Model》把职责分成:
| 进程 | 数量 | 环境 | 职责 |
|---|---|---|---|
| 主进程 | 1 个 | Node.js + Electron API | 生命周期、窗口、菜单、托盘、原生能力 |
| 渲染进程 | 每个网页内容一份,同站可能复用 | Chromium 页面 | 界面和页面脚本 |
| Utility 进程 | 按需 | Node.js,没有窗口 API | CPU 重的任务 |
主进程对应 Chromium 架构里的 Browser 进程,所以全应用只有一个。它负责创建和协调别的进程。
为什么要拆开
渲染进程崩溃时,主进程还能收到 render-process-gone,可以选择重载该窗口。主进程自己退出,整个应用退出。因此文件、数据库和长连接放在主进程或 utility 进程,界面放在渲染进程。
进程之间内存不共享。传对象要经过结构化克隆,函数传不过去。需要协作时使用 IPC,或用 MessageChannelMain 建立一条消息端口。
和站点隔离的关系
Chromium 的站点隔离(Site Isolation)可能让同一站点的多个框架共用渲染进程,也可能把跨站 iframe 拆到别的进程。不要假设“一个窗口永远等于一个独立进程”,隔离和权限仍以每个 webContents 的 webPreferences 为准。