天天看點

electron-ipc通信性能分析

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直接通訊,反應速度快。資料量大的時候可以使用外部存儲,可以降低記憶體占用,釋放暫時不用的記憶體,按需讀取。

繼續閱讀