electron 启动

参考 | 官网 | 性能指南

一句话启动!

electron 分为 主进程渲染进程

main.js 这个文件是 主进程通过 loadFile 和 loadUrl 加载的 html 就是渲染进程

IPC 进程间通信

Electron 的 IPC 实现使用 HTML 标准的 结构化克隆算法 来序列化进程之间传递的对象,这意味着只有某些类型的对象可以通过 IPC 通道传递。所以 DOM 对象(例如 Element,Location 和 DOMMatrix),Node.js 中由 C++ 类支持的对象(例如 process.env,Stream 的一些成员)和 Electron 中由 C++ 类支持的对象(例如 WebContents、BrowserWindow 和 WebFrame)无法使用结构化克隆序列化。

IPC(Inter-Process Communication,进程间通信) 是指在不同进程之间传递数据或信号的机制。不同进程通常有各自的内存空间,无法直接共享数据,因此需要通过某种通信机制来交换信息。IPC 提供了一种在不同进程之间进行数据传输和同步的方法。

Electron 提供了 ipcMain 和 ipcRenderer 两个模块,用于实现主进程和渲染进程之间的通信:

  1. **ipcMain**:用于主进程,监听来自渲染进程的消息,并进行处理。
  2. **ipcRenderer**:用于渲染进程,发送消息到主进程,并接收主进程的响应。

从主进程向渲染进程暴露方法

使用 contextBridge API

1
2
3
4
5
6
7
8
9
10
11
12
13
const { ipcRenderer, contextBridge, shell } = require("electron");

contextBridge.exposeInMainWorld("elecAPI", {
openURL: (url, options) => shell.openExternal(url, options),
openFolder: (dir) => shell.openPath(dir),
send: (channel, data) => {
// whitelist channels
let validChannels = ["toMain"];
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data);
}
},
});

消息端口:渲染进程与渲染进程通信

打包后的文件结构

1
2
3
/out
- /win-unpacked # 包含应用程序的未压缩文件,用于运行和调试。
.exe.blockmap # 用于实现差异更新,减少更新时需要下载的数据量。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!