electron 主进程和渲染进程简解 2019-02-15 nodejs 暂无评论 2923 次阅读 首先,我们查看 [electron 官网中文文档 --> 主进程和渲染器进程](https://electronjs.org/docs/all#主进程和渲染器进程) (三分钟之后......) 算了算了,虽然每一个字都认识,但是组合在一起就不认识了,就算认识,也看得云里雾里的。~~这文档就跟闹着玩一样~~ 那还是我自己整理一下吧。 *这篇文章就简单介绍下这俩的区别以及适用范围* ---- # 二者的定义: ### 主进程(ipcMain) 首先一个问题,*** 什么是主进程? *** 我对 **主进程** 的理解就是:*** 应用程序本身在底层运行的、看不见的、权限最高的系统进程 ***。 > 举个栗子:* 电脑或手机系统,windows、linux、OX、IOS、Android 系统本身就是主进程,开机自动运行,所有其他的程序都是基于这个系统进程之上 * electron 的 **主进程** 就是 `package.json` 里的 `main` 字段对应的文件 **(也仅此文件属于主进程)** ### 渲染进程(ipcRenderer) 相对的,除 **主进程** 之外的所有进程,都是 **渲染进程**。 > 举个栗子:* 你电子产品里的所有应用,甚至包括桌面、时钟等均为渲染进程 * electron 的 **渲染进程** 就是除了 `package.json` 里的 `main` 字段对应的文件之外的其他和项目相关的文件 ---- # 二者的区别 ### 主进程 ```javascript console.log(require('electron')) /* { clipboard: [Getter], nativeImage: [Getter], shell: [Getter], app: [Getter], autoUpdater: [Getter], BrowserView: [Getter], BrowserWindow: [Getter], contentTracing: [Getter], crashReporter: [Getter], dialog: [Getter], globalShortcut: [Getter], ipcMain: [Getter], inAppPurchase: [Getter], Menu: [Getter], MenuItem: [Getter], net: [Getter], netLog: [Getter], Notification: [Getter], powerMonitor: [Getter], powerSaveBlocker: [Getter], protocol: [Getter], screen: [Getter], session: [Getter], systemPreferences: [Getter], TopLevelWindow: [Getter], TouchBar: [Getter], Tray: [Getter], View: [Getter], webContents: [Getter], WebContentsView: [Getter] } */ ``` ### 渲染进程 ```javascript console.log(require('electron')) /* { clipboard: (...), crashReporter: (...), desktopCapturer: (...), desktopCapturer: (...), nativeImage: (...), remote: (...), screen: (...), shell: (...), webFrame: (...), deprecate: (...), deprecations: (...), isPromise: (...) } */ ``` 可以看到,** 主进程 ** 和 ** 渲染进程 **所打印出来的内容是不一样,说明二者在使用上有很大区别,那么咱们就来看看吧。 ## app * `app` 可以说是 `electron` 的核心库了,所有应用级别相关的操作都与它有关 #### app 的使用 ```javascript const electron = require('electron'); console.log(electron.app); // 主进程 有值 // 渲染进程 undefined ``` 嗯? **渲染进程** 怎么取不到值啊?哦,原来是 **渲染进程** 的 `electron` 里面没有 `app` 这个库,所以 **渲染进程** 想要用 `app` 得这样 ```javascript const electron = require('electron'); console.log(electron.remote.app); ``` 标签: electron 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。