zoukankan      html  css  js  c++  java
  • electron-ipc通信性能分析

    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直接通讯,反应速度快。数据量大的时候可以使用外部存储,可以降低内存占用,释放暂时不用的内存,按需读取。

  • 相关阅读:
    Java 垃圾回收机制
    Android 图片旋转(使用Matrix.setRotate方法)
    antd design vue 设置 v-decorator 的初始值
    校验 url 是否以http 或者https 开头
    有效的括号
    堆排序
    归并排序
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/suyuanli/p/14928269.html
Copyright © 2011-2022 走看看