理解Electron中的主进程和渲染进程
什么是主进程
- electron项目启动的时候运行main.js的进程就是主进程
- 一个项目有且只有一个主进程
- 创建窗口等所有系统事件都要在主进程中进行
简单的说就是我们的electron项目的主进程只有一个, 主进程的执行代码需要写到main.js中, 所有跟系统事件相关的代码统统都要写在这里
什么是渲染进程
- 我们每创建一个web页面都会创建一个渲染进程
- 每个web页面运行在它自己的渲染进程中
- 每个渲染进程是独立的, 它只关心它所运行的页面
简单理解就是一个web页面一个渲染进程
主进程和渲染进程的区别
- 主进程通过BrowserWindow创建页面
- 每个BrowserWindow实例都在自己的渲染进程中运行, 当BrowserWindow实例被销毁后, 相应的渲染进程也会被终止
主进程和渲染进程怎么通信
我们如何在一个页面打开另外一个页面?我们的思路应该是这样的
- 从我们第一个页面发出一个指令,也就是说从渲染进程中发出一个指令
- 发送指令到主进程,因为只有主进程才可以创建新的页面
这个时候我们就需要解决主进程和渲染进程之间通信的问题,怎么通信呢?
官方为我们提供类多种实现方式,我们常用的是使用ipcRenderer
和ipcMain
模块发送消息来解决通信问题
ipcRenderer和ipcMain怎么发送消息?看下面示例代码
- 主进程代码
const { ipcMain } = require('electron')
// 监听渲染进行发送的消息
ipcMain.on('renderer-msg', (event, arg) => {
console.log(arg) // prints "帮我创建一个新的页面",
// 执行创建页面的操作
event.reply('main-msg', '好的'); // 给渲染进程回复消息
})
- 渲染进程代码
const { ipcRenderer } = require('electron');
ipcRenderer.on('main-msg', (event, arg) => {
console.log(arg) // prints "好的"
})
ipcRenderer.send('renderer-msg', '帮我创建一个新的页面'