进程模型

简介: 进程模型

Electron 继承了来自 Chromium 的多进程架构,这使得此框架在架构上非常相似于一个现代的网页浏览器。 Chrome 浏览器的进程模型如下所示:

chrome进程模型.png


Chrome 浏览器中的每个标签页在自己的进程中渲染,同时又又一个总的浏览器进程来控制这些标签页的进程以及整个应用程序的生命周期。


Electron 应用程序的结构非常相似, Electron 中有两个进程,分别为主进程渲染进程,与 Chrome 的对应关系如下:

Chrome Electron
浏览器进程 主进程
标签页进程 渲染进程


主进程

每个 Electron 应用都有一个单一的主进程,作为应用程序的入口点。 主进程在 Node.js 环境中运行,这意味着它具有 require 模块和使用所有 Node.js API 的能力。


窗口管理

主进程的主要目的是使用 BrowserWindow 模块创建和管理应用程序窗口。

BrowserWindow 类的每个实例创建一个应用程序窗口,且在单独的渲染器进程中加载一个网页。 可以从主进程用 windowwebContent 对象与网页内容进行交互。


main.js 文件示意:

const {
    BrowserWindow
} = require('electron')
const win = new BrowserWindow({
    width: 800,
    height: 1500
})
win.loadURL('https://github.com')
const contents = win.webContents
console.log(contents)点击复制复制失败已复制


注意

渲染器进程也是为 web embeds 而被创建的,例如 BrowserView 模块。 嵌入式网页内容也可访问 webContents 对象。


由于 BrowserWindow 模块是一个 EventEmitter , 所以可以为各种用户事件(例如,最小化或最大化窗口)添加处理程序。


当一个 BrowserWindow 实例被销毁时,与其相应的渲染器进程也会被终止。


应用程序生命周期

主进程还能通过 Electronapp 模块来控制您应用程序的生命周期。 该模块提供了一整套的事件和方法。


main.js 文件示意:

// quitting the app when no windows are open on non-macOS platforms
app.on('window-all-closed', function() {
    if (process.platform !== 'darwin') app.quit()
})点击复制复制失败已复制


原生 API

为了使 Electron 的功能不仅仅限于对网页内容的封装,主进程也添加了自定义的 API 来与用户的作业系统进行交互。 Electron 有着多种控制原生桌面功能的模块,例如菜单、对话框以及托盘图标。


渲染进程

每个 Electron 应用都会为每个打开的 BrowserWindow (与每个网页嵌入)生成一个单独的渲染器进程。 洽如其名,渲染器负责渲染网页内容。 所以实际上,运行于渲染器进程中的代码是须遵照网页标准的 (至少就目前使用的 Chromium 而言是如此) 。


因此,一个浏览器窗口中的所有的用户界面和应用功能,都应与在网页开发上使用相同的工具和规范来进行攥写。


此外,渲染器无权直接访问 require 或其他 Node.js API 。 为了在渲染器中直接包含 NPM 模块,必须使用与在 web 开发時相同的打包工具 (例如 webpackparcel )

[!warming|label: 注意] 渲染器进程可以生成一个完整的 Node.js 环境以便于开发。 在过去这是默认的,但如今此功能考虑到安全问题已经被禁用


预加载脚本

预加载preload )脚本包含了那些执行于渲染器进程中,且先于网页内容开始加载的代码 。 这些脚本虽运行于渲染器的环境中,却因能访问 Node.js API 而拥有了更多的权限。


预加载脚本可以在 BrowserWindow 构造方法中的 webPreferences 选项里被附加到主进程。


main.js 文件示意:

const {
    BrowserWindow
} = require('electron')
//...
const win = new BrowserWindow({
    webPreferences: {
        preload: 'path/to/preload.js'
    }
})
//...点击复制复制失败已复制


由于预加载脚本与渲染器共享同一个全局 Window 接口,并且可以访问 Node.js API ,因此它通过在 window 全局中暴露任意您的网络内容可以随后使用的 API 来增强渲染器。

目录
相关文章
|
12月前
|
Java
【软考学习9】进程的同步与互斥、生产消费者模型
【软考学习9】进程的同步与互斥、生产消费者模型
164 0
|
网络协议 Java C++
TCP网络编程模型从入门到实战中等篇,单服务器多个用户的简单并发版本, 从多进程 到多线程 到 线程池 版本服务器实现...直到最终解决面试经典C10k高并发服务器设计
TCP网络编程模型从入门到实战中等篇,单服务器多个用户的简单并发版本, 从多进程 到多线程 到 线程池 版本服务器实现...直到最终解决面试经典C10k高并发服务器设计
TCP网络编程模型从入门到实战中等篇,单服务器多个用户的简单并发版本, 从多进程 到多线程 到 线程池 版本服务器实现...直到最终解决面试经典C10k高并发服务器设计
|
Web App开发 JavaScript 安全
Electron入门教程2 ——进程模型
Electron入门教程2 ——进程模型
192 0
Electron入门教程2 ——进程模型
|
监控 应用服务中间件 nginx
Nginx进程以及事件处理模型
Nginx进程以及事件处理模型
135 0
Nginx进程以及事件处理模型
|
消息中间件 网络协议
《hotwheel 网络模型和进程模型》
hotwheel是就是一个消息中间件,类似于zeromq,但是仅仅是一个toy级别的项目。和zeromq的强大还是不能比的。但是zeromq和erlang的另一个开源项目RabbitMQ又相形见绌。
《hotwheel 网络模型和进程模型》
|
并行计算
《并行计算的编程模型》一2.3.6 活动消息进程
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.6节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
810 0
|
网络协议 Apache 应用服务中间件
|
Linux 调度 索引
Linux进程模型
      ----原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/01/2617884.html------ Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构,可更清楚的理解linux进程模型。
1172 0