问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从Electron架构出发,深究Electron跨端原理|多图

发布网友 发布时间:2024-10-04 02:16

我来回答

1个回答

热心网友 时间:2024-10-08 18:24

前言

Electron是使用JavaScript,HTML和CSS构建跨平台的桌面应用程序的框架,可构建出兼容Mac、Windows和Linux三个平台的应用程序。

一个跨端框架的设计,有三个问题需要考虑,分别是UI渲染、原生API以及客户端构建方式。Electron是如何解决上述问题的呐?

Electron的跨端原理并不难理解:它通过集成浏览器内核,使用前端的技术来实现不同平台下的渲染,并结合了Chromium、Node.js和用于调用系统本地功能的API三大板块。

Chromium为Electron提供强大的UI渲染能力,由于Chromium本身跨平台,因此无需考虑代码的兼容性。最重要的是,可以使用前端三板斧进行Electron开发。

Chromium并不具备原生GUI的操作能力,因此Electron内部集成Node.js,编写UI的同时也能够调用操作系统的底层API,例如path、fs、crypto等模块。

NativeAPI为Electron提供原生系统的GUI支持,借此Electron可以调用原生应用程序接口。

总结起来,Chromium负责页面UI渲染,Node.js负责业务逻辑,NativeAPI则提供原生能力和跨平台。

上面粗略讲解了Electron的跨端原理,下面我们来深究一下。

Chromium架构

JavaScript是单线程语言,但浏览器是多线程的,Chromium作为Chrome的实验版,自然也是基于多线程工作机制。(图源:Chromium官网)

Chromium的多进程模式主要由三部分组成:浏览器端(Browser)、渲染器端(Render)、浏览器与渲染器的通信方式(IPC)

1.浏览器进程

浏览器进程Browser只有一个,当Chrome打开时,进程启动。浏览器为每个渲染进程维护对应的RenderProcessHost,负责浏览器与渲染器的交互。RenderViewHost则是与RenderView对象进行交互,渲染网页的内容。浏览器与渲染器通过IPC进行通信。

2.渲染进程管理

每个渲染进程都有一个全局RenderProcess对象,可以管理其与父浏览器进程之间的通信,并维护其全局状态。

3.view管理

每个渲染器可以维护多个RenderView对象,当新开标签页或弹出窗口后,渲染进程就会创建一个RenderView,RenderView对象与它在浏览器进程中对应的RenderViewHost和Webkit嵌入层通信,渲染出网页网页内容(这里是我们日常主要关注的地方)。

Electron架构解析

Electron架构参考了Chromium的多进程架构模式,即将主进程和渲染进程隔离,并且在Chromium多进程架构基础上做一定扩展。

将上面复杂的Chromium架构简化:

Chromium运行时由一个BrowserProcess,以及一个或者多个RendererProcess构成。RendererProcess负责渲染页面Web,BrowserProcess负责管理各个RendererProcess以及其他功能(菜单栏、收藏夹等)

下面我们看一下啊Electron架构有那些变化?

Electron架构中仍然使用了Chromium的RendererProcess渲染界面,RendererProcess可以有多个,互相独立不干扰。由于Electron为其集成了Node运行时,RendererProcess可以调用NodeAPI。主要负责:利用HTML和CSS渲染页面;利用JavaScript实现页面交互效果。

相较于Chromium架构,Electron对Browser线程做了很多改动,将其更改名MainProcess,每个应用程序只能有一个主线程,主线程位于Node.js下运行,因此其可以调用系统底层功能。其主要负责:渲染进程的创建;系统底层功能及原生资源的调用;应用生命周期的控制(包裹启动、推出以及一些事件监听)

经过上面的分析,Electron多进程的系统架构可以总结为下图:

可以发现,主线程和渲染线程都集成了NativeAPI和Node.js,渲染线程还集成Chromium内核,成功实现跨端开发。

Node与Chromium

Node的事件循环与浏览器的事件循环有明显不同,Chromium既然是Chrome的实验版,自然与浏览器实现相同。

Node的事件循环基于libuv实现,而Chromium基于messagebump实现。主线程只能同时运行一个事件循环,因此需要将两个完全不同的事件循环整合起来。

有两种解决方案:

使用libuv实现messagebump将Chromium集成到Node.js

将Node.js集成到Chromium

Electron最初的方案是第一种,使用libuv实现messagebump,但不同的OS系统GUI事件循环差异很大,例如mac为NSRunLoop,Linux为glib,实现过程特别复杂,资源消耗和延迟问题也无法得到有效解决,最终放弃了第一种方案。

Electron第二次尝试使用小间隔的定时器来轮询GUI事件循环,但此方案CPU占用高,并且GUI响应速度慢。

后来libuv引入了backend_fd概念,backend_fd轮询事件循环的文件描述符,因此Electron通过轮询backend_fd来得到libuv的新事件实现Node.js与Chromium事件循环的融合(第二种方案)。

下面这张PPT完美的描述了上述过程(图源:Electron:TheEventLoopTightrope-ShelleyVohr|JSHeroes2019)

参考链接

Multi-processArchitecture

EssentialElectron

跨平台技术实战!百度文库跨平台技术快速落地全过程

ElectronInternals:MessageLoopIntegration

Electron开发实战文档资料

?奖品大放送

小包又来了,本次活动的奖励有两份:妖娆托举猫和马赛克线圈毛巾

参与方式:点赞或评论即可(友情提示,如果回复跨端相关的评论,运气可能会更好哦)

后语

我是?战场小包?,一个快速成长中的小前端,希望可以和大家一起进步。

如果喜欢小包,可以在?掘金?关注我,同样也可以关注我的小小公众号——小包学前端。

一路加油,冲向未来!!!

疫情早日结束人间恢复太平原文:https://juejin.cn/post/7103337772424888356
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
美的燃气热水器12升电脑版显示FR一pH一PL一dH一nE一qU怎么调好_百度知... 热水器ph什么意思 上海工程技术大学公共管理专业是什么学院 公共事业管理在暨南大学中属于哪个学院? 中央财经大学公共事业管理学生就业去向都有哪些 中飞院公共事业管理是什么专业 广西医科大学公共事业管理属于哪个学院 抖音怎么发视频@抖音小助手 发视频@抖音小助手操作一览 轻颜相机怎么取消自动续费 取消自动续费教程 轻颜相机vip怎么取消 快手如何设置直播悬浮窗权限? 中学有哪些部门 在贵阳,一个普通中学(贵阳五中)教务处工作的一个正式职工(无职务),不... nodejs 学习-11 VSCode 插件 实战案例丨Vscode开发第一个Vue+Element Plus示例 VSCode技术揭秘(一) 理肤泉B5 修复霜的延展性如何? 初探vscode (一) 我只教一次!vscode remote-ssh 连接失败的基本原理和优雅的解决方案 怎样才能开启美的空调省电模式呢? 美的空调省电模式怎样使用? 《白桦》表达了诗人什么 请问 练呼拉拳能让腰变细吗? 起帆和飞鹤电线哪个好 请问哪种舞可以细腰? ...的裤子还大,现在穿27 的了,请问怎么减掉小肚子 基金跟踪误差意味什么 苹果手机拉黑名单怎样解除 钢筋拉伸的速率怎么算 ...什么是提问,什么是情态动词,什么是助动词,还有什么词有什么_百度... electron如何运行? electron 桌面端业务中的小结(坑) 用Electron打造炫酷跨平台桌面应用:轻松上手指南 Electron——使用JavaScript编写跨平台桌面应用 vue3+electron开发桌面软件入门与实战(0)——创建electron应用_百度知... 苹果笔记本电脑充电器的问题? ...度过这难关。想问问培训有什么生动的小故事可以做借鉴? 怎样可以清除qq个性签名历史记录 QQ签名历史可以删吗?如果可以,怎么删? CS75现在2万4,在刚刚启动时时速在30以下左后轮会有咯吱咯吱的异响,30... w7系统360桌面壁纸存放在哪 16款手豪cs75行驶中异响松油门再加油门异响 都来看一下? 长安CS75汽车异响 3GP - (H.263 AMR_NB) 3GPP Format (*.3gp)什么意思啊。是不是看了之... 3gp转换器3GP格式简介 为什么CS75汽车刚起步走时轮胎有异响 h.263和3gp有什么关系? 你好 请问黄日华版天龙八部第18集阿朱死的时候的背景音乐是什么... 97天龙八部黄日华版阿朱死时的二胡背景音乐 我用的w7戴尔的 一些文件看见放C盘里的 users/dell/AppData里了 但是...