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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章