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 ...
随机推荐
- 构建前端第12篇之---在Vue中对组件,变量,函数的全局引入
张燕涛写于2020-01-16 星期two 本篇还是源于import和export的使用,昨天看es6入门 和MDN文档,大体上用法了解了,但今天看ElementUI源码的时候,看到 //src/in ...
- header.mapper 用法
const header= [xxxx,xxxx] 基本用法是 const obj = header.map( item=>{ obj= item+'123'; return obj }) c ...
- java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决
客户端调用服务端cxf,服务端报 java.lang.RuntimeException: Cannot create a secure XMLInputFactory 我的cxf 版本 为 3.0. ...
- Java基础——自增自减及初识Math类
自增自减及初识Math类 public class Demon05 { public static void main(String[] args) { // ++ -- 自 ...
- CCS box-flex属性
box-flex==按比例分配父标签的宽度or高度空间 1.非固定分配 eg.一块地总150平方分配给三孩子,按照2:1:1分 #老大 { 房子-分配: 2; } = 75平 #老二 { 房子-分配: ...
- 95后新同事年薪35W+,老员工却“自愿申请”降薪10%,中年职场人正在崩溃
蔡依林在演唱会上说过的一句话:"在乐坛摸爬滚打这么多年,遭遇了那么多质疑和嘲讽还能挺立到今天,然后想说40岁是个很棒的年纪......",让很多在职场打拼多年的老员工感慨颇深. 真 ...
- 字节跳动Android实习面试难吗,应该如何应对?
字节跳动的面试难不难其实很难去非常准确的定义,但是能肯定的一点是,字节跳动的面试题都很有水平,真正考察了该岗位在以后工作中需要的能力. 大学学的Java后面又自学Android方向,跟着老师在实验室做 ...
- Android开发失业50天,面了10家公司,唯二的offer也主动拒了
最近在论坛看到这样一个帖子: 坐标深圳. 4 月上旬公司解散.(现在想想好像是假解散,真裁员) 这一个半月以来,从朋友内推,到拉勾.Boss 直聘,再到猎聘.智联招聘. 从开始的精准投递,到后来的海投 ...
- 【LeetCode】860. 柠檬水找零
860. 柠檬水找零 知识点:贪心 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 ...
- NSIS 制作自动升级包
1:首先定义基础变量 !define PRODUCT_NAME "XXX"//补丁名称 !define PRODUCT_VERSION "3"//版本号 !de ...