Electron团队为什么要干掉remote模块
Electron团队提供remote模块给开发者,
主要目的是为了简化渲染进程和主进程互访的难度,
这个目的却是达到了。
但也带来了很多问题,
归纳起来主要分为以下四点:
第一:它很慢
通过remote模块可以访问主进程的对象、类型、方法,
但这些操作都是跨进程的,
跨进程操作性能上的损耗可能是进程内操作的几百倍甚至上千倍。
假设你在渲染进程通过remote模块创建了一个BrowserWindow对象,
不但你创建这个对象的过程很慢,
后面你使用这个对象的过程也很慢。
小到更新这个对象的属性,
大到使用这个对象的方法,
都是跨进程的,
这种累积性的性能损耗,
可想而知影响有多大。
第二:它会制造混乱
假设我们在渲染进程中通过remote模块使用了主进程的某个对象,
此对象在某个时刻会触发一个事件(BrowserWindow对象中就有很多这样的事件),
事件处理程序是在渲染进程中注册的,
当事件发生时,实际上是主进程的原始对象先接到这个事件,
再异步的通知渲染进程要执行事件处理程序,
此时可能已经错过了很多事情,
类似event.preventDefault()这样的操作可能毫无意义。
在一个业务复杂的应用中这类错误非常难排查。
第三:它会制造假象
我们在渲染进程中通过remote模块使用了主进程的某个对象,
得到的是这个对象的映射,是一个代理对象,
它看起来像是真正的对象,但实际上不是。
首先这个对象原型链上的属性不会被映射到渲染进程的代理对象上。
其次类似NaN、Infinity这样的值不会被正确的映射给渲染进程,
如果一个主进程方法返回一个NaN值
那么渲染进程通过remote模块访问这个方法将会得到undefined。
第四:它存在安全问题
因为remote模块底层还是通过IPC管道与主进程通信的,
那么假设你的应用需要加载第三方网页,
即使你让这些网页运行在安全沙箱内,
恶意代码仍可能通过原型污染攻击来模拟remote模块的远程消息
以获取访问主进程模块的权力,逃离沙箱的控制。
反思
remote模块并非一无是处
Electron进程间通讯确实非常复杂,
不但增加了开发人员的劳动,还增加了开发人员的心智负担
没有remote模块开发人员该怎么办呢
要么就实现自己的进程间通信工具(我就做过一个跨进程的消息总线)
要么就强行引入remote模块
实际上remote模块并非被干掉了
而是从核心模块变成了可供开发者选择的模块
决策权交给了开发者
但开发者再使用remote模块时,一定要考虑上面提到的那四个问题
不然你的应用程序可能会存在不稳定的现象。
Electron团队为什么要干掉remote模块的更多相关文章
- 团队-爬虫豆瓣top250项目-模块开发过程
项目托管平台地址:https://github.com/gengwenhao/GetTop250.git 开发模块功能: "get_info()单个页面的爬取"功能,开发时间:15 ...
- Forward团队-爬虫豆瓣top250项目-模块开发过程
项目托管平台地址:https://github.com/xyhcq/top250 开发模块功能: 爬虫对信息的处理部分 开发时间:5天的下午空余时间(每天大约1小时,边学模块的使用边开发) 实现了:爬 ...
- Forward团队-爬虫豆瓣top250项目-模块测试过程
我所做的模块不需要测试,但在后续其他人编写代码的时候,我需要对网页源码进行进一步的规范,然后指导别人在网页源码中的标签用法.
- 团队-爬虫豆瓣top250项目-模块测试过程
模块测试: 项目托管平台地址:https://github.com/gengwenhao/GetTop250.git 模块测试:"获取250排名的全部电影信息"功能,测试方法:手动 ...
- 如何点击穿透Electron不规则窗体的透明区域
实现一个不规则窗体 这里我们实现一个圆形窗体,实现其他形状的窗体与这个方法类似. 首先,把窗口的高度(height)和宽度(width)值修改为相同的值,使窗口成为一个正方形. 其次,把窗口的透明属性 ...
- electron获取不到remote
electron获取不到remote 问题 // 渲染进程 let remote = require('electron').remote console.log(remote) // undefin ...
- Electron安装过程深入解析(读完此文解决Electron应用无法启动,无法打包的问题)
1. 安装Electron依赖包 开发者往往通过npm install(或 yarn add)指令完成为Node.js工程安装依赖包的工作, 安装Electron也不例外,下面是npm和yarn的安装 ...
- 【Electron Playground】Electron 窗口问题汇总
作者:Kurosaki 本节旨在汇总在开发Electron 窗口可能遇到的问题,做一个汇总,后续遇到问题会持续更新. 1. 窗口闪烁问题. const { BrowserWindow } = requ ...
- 自己实现一个Electron跨进程消息组件
我们知道开发Electron应用,难免要涉及到跨进程通信,以前Electron内置了remote模块,极大的简化了跨进程通信的开发工作,但这也带来了很多问题,具体的细节请参与我之前写的文章: http ...
随机推荐
- Linux bash命令行常用快捷键(Xshell和secure CRT以及gnome-terminal)
常用的命令行击键操作 ctrl + insert xshell中复制,可以设置选中内容自动复制ctrl shift + c crt中复制shift + insert xshell中粘贴ctrl s ...
- [HNOI]2011卡农
这是一道很好的组合数学题. 对于和我一样五音里面有六音不全的人来说,我们就应该转换一下题目的意思: 一句话题意: 题目的意思就是说要从一个有 n 个元素的集合当中选出一个长度为m的集合,然后满足: 1 ...
- 【动画消消乐 】HTML+CSS 吃豆豆动画 073
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...
- windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)
前言 小白直接上手 docker 构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...
- Go语言常见的坑
目录 1. 可变参数是空接口类型 2. 数组是值传递 3.map遍历是顺序不固定 4. 返回值被屏蔽 5.recover必须在defer函数中运行 6. main函数提前退出 7.通过Sleep来回避 ...
- Java互联网架构师系统进阶课程学习 (3)【享学】
3.原子操作CAS Atom(不可分割) 什么是原子操作?如何实现原子操作? syn基于阻塞的锁的机制,1.被阻塞的线程优先级很高,2.拿到锁的线程一直不释放锁怎么办?3.大量的竞争,消耗cpu,同时 ...
- 刷了无数大厂Android研发岗面试题,其实考的无非是这 3 点能力
前言 发现一个有趣的现象,似乎程序员们对面试题总是抱有热情,多看几道面试题,自己的面试能力就可以提高一点. 作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代 ...
- Vue2.x响应式原理
一.回顾Vue响应式用法 vue响应式,我们都很熟悉了.当我们修改vue中data对象中的属性时,页面中引用该属性的地方就会发生相应的改变.避免了我们再去操作dom,进行数据绑定. 二.Vue响应 ...
- SunOS与Solaris系统的对应关系
下文绝大部分译自维基百科Solaris词条的"历史"部分: http://en.wikipedia.org/wiki/Solaris_(operating_system)#Hist ...
- shell趣味实验——图形
目录 一.直线 二.矩形 2.1.镂空矩形 三.直角三角形 3.1.倒直角三角形 3.2.反直角三角形 3.3.等腰三角形 3.4.倒等腰三角形 3.5.菱形 四.平行四边形 五.梯形 5.1.等腰梯 ...