多執行緒
透過 Web Workers,可以在作業系統層級的執行緒中執行 JavaScript。
多執行緒 Node.js
可以在 Electron 的 Web Workers 中使用 Node.js 的功能,為此,應在 webPreferences
中將 nodeIntegrationInWorker
選項設定為 true
。
const win = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
})
nodeIntegrationInWorker
可以獨立於 nodeIntegration
使用,但 sandbox
不得設定為 true
。
注意:由於沙箱策略不相容,此選項在 SharedWorker
s 或 Service Worker
s 中不可用。
可用的 API
Web Workers 支援所有 Node.js 的內建模組,並且仍然可以使用 Node.js API 讀取 asar
封存檔。但是,Electron 的內建模組都不能在多執行緒環境中使用。
原生 Node.js 模組
任何原生 Node.js 模組都可以直接在 Web Workers 中載入,但強烈建議不要這樣做。大多數現有的原生模組都是假設在單執行緒環境下編寫的,在 Web Workers 中使用它們會導致崩潰和記憶體損壞。
請注意,即使原生 Node.js 模組是執行緒安全的,在 Web Worker 中載入它仍然不安全,因為 process.dlopen
函式不是執行緒安全的。
目前安全載入原生模組的唯一方法是確保應用程式在 Web Workers 啟動後不再載入原生模組。
process.dlopen = () => {
throw new Error('Load native module is not safe')
}
const worker = new Worker('script.js')