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. Mac 搭建 Sentry

    Sentry 为我们提供应用程序的错误跟踪,使我们能够快速定位到错误所在的文件和行号. 以下是官网支持语言和框架的部分截图: 准备工作 自 2020 年 12 月 4 日起,Sentry 默认使用 P ...

  2. 15.Git

    1.Git介绍 1.1版本控制(理解) 无论是代码编写,还是文档编写,我们都会遇到对文档内容反复修改的情况 1.2开发中存在的问题(理解) 程序员小明负责的模块就要完成了,就在即将提交发布之前的一瞬间 ...

  3. mysql无列名注入

    0x00 原理   mysql无列名注入是报错注入的一个变种,前提是已知表名,但是不知道列名,或者只知道部分列名,可通过报错注入拼接查询自身表,当自表被拼接时,由于存在重复属性列,会将列信息报错返回, ...

  4. 【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)

    https://segmentfault.com/q/1010000005067119 Pycharm调试高效,还是pdb调试高效? (在服务端)  python  3.9k 次浏览 问题对人有帮助, ...

  5. CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上

    一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...

  6. jsoup select 选择器(Day_02)

    "自己"这个东西是看不见的,撞上一些别的什么,反弹回来,才会了解"自己". 所以,跟很强的东西.可怕的东西.水准很高的东西相碰撞,然后才知道"自己&q ...

  7. 查看mysql的数据库物理存放位置

    1.查看mysql的数据库物理存放位置:    show global variables like "%datadir%";

  8. FreeBSD 13.0 正式版发布,已经可以下载

    请访问原文链接:https://sysin.org/article/freebsd-13/,查看最新版.原创作品,转载请保留出处. 根据 FreeBSD 13.0 官方发布计划,4 月 9 日 13. ...

  9. ELK搭建-windows

    一.E 二.L 启动 三.K 四.filebeat 五.配置文件使用 1.logstash-sample.conf # Sample Logstash configuration for creati ...

  10. Python+Selenium学习笔记10 - send_keys上传文件

    在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...