electron-ipc通信性能分析

electron的主进程和渲染进程间通信方案

  • ipc通信
  • 借助外部存储通信(通过ipc通知其它进程去读取)

方案描述

ipc通信

使用
主进程 ==> 渲染进程

发送:webContents.send(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可选)

通过 channel 发送异步消息给渲染进程,你也可发送任意的参数.参数应该在 JSON 内部序列化,并且此后没有函数或原形链被包括了.

渲染进程可以通过使用 ipcRenderer 监听 channel 来处理消.


接收:ipcMain.on(channel, listener)

  • channel String
  • listener Function

监听 channel, 当新消息到达,将通过 listener(event, args...) 调用 listener.

渲染进程 ==> 主进程

发送: ipcRenderer.send(channel[, arg1][, arg2][, ...])ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可选)

通过 channel 向主进程发送异步(同步)消息,也可以发送任意参数.参数会被JSON序列化,之后就不会包含函数或原型链.

主进程通过使用 ipcMain 模块来监听 channel,从而处理消息,同步消息通过 event.returnValue 来响应.

注意: 发送同步消息将会阻塞整个渲染进程,除非你知道你在做什么,否则就永远不要用它 .


接收:ipcRenderer.on(channel, listener)

  • channel String
  • listener Function

监听 channel, 当有新消息到达,使用 listener(event, args...) 调用 listener .

优缺点

优点:
  • 可以同步或异步通信
  • 使用方式简单
  • 传输数据较小的情况下响应速度快
缺点:
  • 滥用渲染进程同步通信时会导致进程阻塞,所以要在确保不阻塞的情况下使用
  • 数据量大的场景下会导致内存溢出和通信速度变慢

借助外部存储通信

该方案还是基于ipc通信的,将数据存放到磁盘再通过ipc通知监听方去取,所以速度取决于IO读取的速度

优缺点

优点:
  • 不占用内存
  • 进程关闭后数据还在
缺点
  • 读取速度慢,取决于IO读写速度

测试数据

测试没有覆盖多种设备和平台

测试以String为传输类型

数据大小 ipc 借助外部存储通信
100KB <0ms 7ms
1MB 3ms 24ms
10MB 36ms 146ms
50MB 152ms 883ms
100MB 326ms 2018ms

结论

数据量较小时建议使用ipc直接通讯,反应速度快。数据量大的时候可以使用外部存储,可以降低内存占用,释放暂时不用的内存,按需读取。

electron-ipc通信性能分析的更多相关文章

  1. electron自定义最小化,最大化和关闭按钮

    Electron ipcRenderer 模块 ipcRenderer 模块是一个 EventEmitter 类的实例. 它提供了有限的方法,你可以从渲染进程向主进程发送同步或异步消息. 也可以收到主 ...

  2. React Native之新架构中的Turbo Module实现原理分析

    有段时间没更新博客了,之前计划由浅到深.从应用到原理,更新一些RN的相关博客.之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新.主要是平时空余时间都用来帮着带娃了,不过还是 ...

  3. Electron使用与学习--(页面间的通信)

    目录结构: index.js是主进程js. const electron = require('electron') const app = electron.app const BrowserWin ...

  4. Electron使用与学习--(基本使用与菜单操作)

    对于electron是个新手,下面纯属个人理解.如有错误,欢迎指出.   一.安装 如果你本地按照github上的 # Install the `electron` command globally ...

  5. Electron 不完全快速手册

    Electron能干嘛 Vscode 基于Electron开发的,他是用来开发桌面软件的,可以轻易的跨平台 他的前身是atomshell,图标很丑,不用在意,一点也不像vscode也不用在意.   L ...

  6. Electron笔记

    一个能让你用Web技术开发桌面应用的开源项目.这里做一个笔记(非正式文章): 官网地址:http://electron.atom.io/ API相关 Electron提供的主进程接口.渲染进程接口.共 ...

  7. 使用 electron 做个播放器

    使用 electron 做个播放器 本文同步更新在:https://github.com/whxaxes/blog/issues/8 前言 虽然 electron 已经出来好长时间了,但是最近才玩了一 ...

  8. electron + vue 实践项目

    github地址 本地安装环境准备 安装node: * https://nodejs.org/en/download/ 配置webpack: npm install -g webpack(sudo权限 ...

  9. Electron 实战桌面计算器应用

    前言 Electron 是一个搭建跨平台桌面应用的框架,仅仅使用 JavaScript.HTML 以及 CSS,即可快速而容易地搭建一个原生应用.这对于想要涉及其他领域的开发者来说是一个非常大的福利. ...

随机推荐

  1. springboot 项目中css js 等静态资源无法访问的问题

    目录 问题场景 问题分析 问题解决 问题场景 今天在开发一个springboot 项目的时候突然发现 css js 等静态资源竟然都报404找不到,折腾了好久终于把问题都解决了,决定写篇博客,纪录总结 ...

  2. Envoy:TLS双向认证

    环境准备 主机 角色 数量 front-envoy front envoy 1 service envoy 作为内部后端的envoy 2 end 后端应用程序 2 访问 / front-envoy = ...

  3. bashshell删除列

    删除所有空白列cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log7删除文件中的所有空格sed -i s/[[:space:]] ...

  4. xsos:一个在Linux上阅读SOSReport的工具

    xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29  51CTO 原文  http://os.51cto.com/art/201905/596889 ...

  5. 攻防世界(八)web2

    攻防世界系列:web2 1.代码审计  知识补充: strrev(string):反转字符串 strlen(string):字符串长度 substr(string,start,length):截取字符 ...

  6. [转发]PotPlayer 无损截取视频片段

    PotPlayer 无损截取视频片段 2019-03-29 21:04:21 ForeverStrong 阅读数 2928  收藏 更多 分类专栏: 视频图像编辑   PotPlayer 无损截取视频 ...

  7. Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体

    Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...

  8. python3 ftplib模块连接FTP

    from ftplib import FTP_TLS import os import re class MyFtp(FTP_TLS): """继承FTP类"& ...

  9. 常见判断错误 (Day_30)

    写给自己的话: 这是一个卡了我小半天的BUG,也是一个很低端的BUG,写篇博客吧,以后回来看看,会发现曾经的自己是如何的菜. 同样,以此记录我的进步 步入正题,这是我实现多条件分页时遇到的一个BUG, ...

  10. 归一化方法总结 | 又名“BN和它的后浪们“

    前言: 归一化相关技术已经经过了几年的发展,目前针对不同的应用场合有相应的方法,在本文将这些方法做了一个总结,介绍了它们的思路,方法,应用场景.主要涉及到:LRN,BN,LN, IN, GN, FRN ...