主进程与渲染进程
主进程
主进程是应用入口,文件由 package.json 的 main 指定。它可以使用 Node.js 和全部 Electron 主进程模块,例如 app、BrowserWindow、dialog、ipcMain。
适合放在主进程的工作:
- 创建和销毁窗口
- 读写用户数据目录里的文件和数据库
- 托盘、菜单、全局快捷键、开机启动
- 接收渲染进程的请求并校验参数
主进程只有一个线程跑 JavaScript。这里的同步大计算或同步磁盘操作会拖住所有窗口的 IPC。重活放到 utilityProcess。
渲染进程
每个 BrowserWindow 或 WebContentsView 带有一个 webContents,页面就跑在对应的渲染进程里。这里可以使用 DOM、CSS、前端框架和 Web API。
默认配置下,页面脚本不能 require('fs') 或 require('electron')。它能用的桌面能力,是预加载脚本用 contextBridge 挂到 window 上的那些函数。
两边怎么配合
// 渲染进程:只调用预加载暴露的函数
const file = await window.api.pickFile();
// 主进程:真正打开系统对话框
ipcMain.handle('dialog:pick', async (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
const result = await dialog.showOpenDialog(win, { properties: ['openFile'] });
return result.filePaths[0] ?? null;
});
页面负责展示,主进程负责系统调用。参数在主进程里再检查一次,因为页面里的脚本可能被替换。