本节咱们来学习什么是主过程和渲染过程,主过程与渲染过程之间有什么区别,主过程和渲染过程之间的通信。上面咱们先来看一下过程的概念。
过程(Process)是计算机中的程序对于某数据汇合上的一次运行流动,是零碎进行资源分配和调度的根本单位,是操作系统构造的根底。
什么是主过程
在 Electron
中,启动我的项目时运行的 main.js
脚本就是咱们说的主过程。在主过程运行的脚本能够以创立 web
页面的模式展现 GUI
。
一个 Electron
利用有且只有一个主过程。并且创立窗口等所有零碎事件都要在主过程中进行。
什么是渲染过程
因为 Electron
应用 Chromium
来展现页面,所以 Chromium
的多过程构造也被充分利用。每个 Electron
的页面都在运行着本人的过程,这样的过程咱们称之为渲染过程。
也就是说每创立一个 web
页面都会创立一个渲染过程。每个 web
页面都运行在它本人的渲染过程中。每个渲染过程是独立的,它只关怀它所运行的页面。
主过程与渲染过程的区别
主过程应用 BrowserWindow
实例创立网页。每个 BrowserWindow
实例都在本人的渲染过程中运行。当一个 BrowserWindow
实例被销毁后,相应的渲染过程也会被终止。
主过程治理所有页面和与之对应的渲染过程。每个渲染过程都是互相独立的,并且只关怀他们本人的网页。
应用Electron的API
Electron
在主过程和渲染过程中提供了大量 API
去帮忙开发桌面应用程序, 在主过程和渲染过程中,能够通过require()
办法将其蕴含在模块中,以此获取 Electron
的 API
。
引入 electron
:
const electron = require('electron');
所有 Electron
的 API
都被指派给一种过程类型。许多 API
只能被用于主过程或渲染过程中,但其中一些 API
能够同时在上述两种过程中应用。 每一个 API
的文档都将申明咱们能够在哪种过程中应用该 API
。
Electron
中的窗口是应用 BrowserWindow
类型创立的一个实例, 它只能在主过程中应用,如下所示:
const { BrowserWindow } = require('electron')const win = new BrowserWindow()
主过程和渲染过程之间通信
Electron
的主过程是在后盾运行,对应 main.js
文件。而渲染过程是前端看到的,对应 index.html
文件。这个两个过程之间的通信首选 ipc
形式,因为它会在实现时返回,而不会阻止同一过程中的其余操作。
异步通信
异步通信,在发送音讯之后,不会阻止同一过程中程序的持续运行。下列示例渲染过程发送异步音讯 ping
到主过程,而后主过程答复 pong
。
示例:
渲染器过程:
const ipc = require('electron').ipcRendererconst asyncMsgBtn = document.getElementById('async-msg')asyncMsgBtn.addEventListener('click', function () { ipc.send('asynchronous-message', 'ping')})ipc.on('asynchronous-reply', function (event, arg) { const message = `异步音讯回复: ${arg}` document.getElementById('async-reply').innerHTML = message})
主过程:
const ipc = require('electron').ipcMainipc.on('asynchronous-message', function (event, arg) { event.sender.send('asynchronous-reply', 'pong')})
同步音讯
除了以异步形式在过程之间发送音讯,咱们还能够应用 ipc
模块在过程之间发送同步音讯,然而此办法的同步个性意味着它在实现工作时会阻止其余操作。
示例:
渲染器过程:
const ipc = require('electron').ipcRendererconst syncMsgBtn = document.getElementById('sync-msg')syncMsgBtn.addEventListener('click', function () { const reply = ipc.sendSync('synchronous-message', 'ping') const message = `同步音讯回复: ${reply}` document.getElementById('sync-reply').innerHTML = message})
主过程:
const ipc = require('electron').ipcMainipc.on('synchronous-message', function (event, arg) { event.returnValue = 'pong'})
链接:https://www.9xkd.com/