電子冒険:エピソード20:IPCベンチマーク
8174 ワード
電子フロントエンドとバックエンドの間のIPC通信はどの程度速いか?クイックベンチマークをしましょう.
バックエンドは、単に1つのチャンネル
The
ベンチマーク結果は以下の通りです.
ご覧のように、別のプロセスを呼び出すのはローカル関数の呼び出しよりずっと遅いです.些細な機能のために、それはローカル呼び出しをするために1.7 nsを取りました、そして、IPC呼び出しをする80000 ns.ですから、どのコードがどのプロセスに入っているのか、また、より少ないラウンドトリップで同じ結果を得ることができるならば、あなたは確かに考慮すべきです.
一方、IPCはまだ非常に高速だった!あなたのUIが毎秒60フレームを持っているならば、あなたはフレームあたり16 msを持っています、したがって、IPC呼び出しにつき0.08 msの待ち時間はたっぷり速いです.
比較によって、インターネットの上のHTTP呼び出しは100 msのようなものです、そして、localhost HTTPサーバさえ>1 msであるでしょう.
これはどのような“深刻な”ベンチマークとして意図されていませんが、それはあなたにいくつかのballparkの種類は、さまざまなモードからの期待の種類の種類を与える必要があります.
いつものように.all the code for the episode is here .
バックエンド
バックエンドは、単に1つのチャンネル
increment
, 返り値は1を渡し、let { app, BrowserWindow, ipcMain } = require("electron")
ipcMain.handle("increment", (event, x) => (x+1))
function createWindow() {
let win = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
}
})
win.loadFile("index.html")
}
app.on("ready", createWindow)
app.on("window-all-closed", () => {
app.quit()
})
ベンチマーク
The
index.html
は結果のプレースホルダですので、スキップしましょう.これがベンチマークですapp.js
:let { ipcRenderer } = require("electron")
let localIncrement = (x) => (x+1)
let benchmarkLocal = async () => {
let startTime = new Date()
let x = 0;
while (x < 100_000_000) {
x = localIncrement(x)
}
let endTime = new Date()
return endTime - startTime
}
let benchmarkIPC = async () => {
let startTime = new Date()
let x = 0;
while (x < 10_000) {
x = await ipcRenderer.invoke("increment", x)
}
let endTime = new Date()
return endTime - startTime
}
let runBenchmark = async () => {
let results = document.querySelector("#results")
results.textContent = `
10k IPC calls took: ${await benchmarkIPC()}ms
100M local calls took: ${await benchmarkLocal()}ms
`
}
runBenchmark()
結果
ベンチマーク結果は以下の通りです.
ご覧のように、別のプロセスを呼び出すのはローカル関数の呼び出しよりずっと遅いです.些細な機能のために、それはローカル呼び出しをするために1.7 nsを取りました、そして、IPC呼び出しをする80000 ns.ですから、どのコードがどのプロセスに入っているのか、また、より少ないラウンドトリップで同じ結果を得ることができるならば、あなたは確かに考慮すべきです.
一方、IPCはまだ非常に高速だった!あなたのUIが毎秒60フレームを持っているならば、あなたはフレームあたり16 msを持っています、したがって、IPC呼び出しにつき0.08 msの待ち時間はたっぷり速いです.
比較によって、インターネットの上のHTTP呼び出しは100 msのようなものです、そして、localhost HTTPサーバさえ>1 msであるでしょう.
これはどのような“深刻な”ベンチマークとして意図されていませんが、それはあなたにいくつかのballparkの種類は、さまざまなモードからの期待の種類の種類を与える必要があります.
いつものように.all the code for the episode is here .
Reference
この問題について(電子冒険:エピソード20:IPCベンチマーク), 我々は、より多くの情報をここで見つけました https://dev.to/taw/electron-adventures-episode-20-ipc-benchmark-2b2dテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol