マルチスレッド
Web Workers により、JavaScript を OS レベルのスレッドで実行することが可能になります。
#
マルチスレッド Node.jsElectron の Web Workers 内で Node.js の機能を使用するには、webPreferences
の nodeIntegrationInWorker
オプションを true
に設定する必要があります。
const win = new BrowserWindow({ webPreferences: { nodeIntegrationInWorker: true }})
nodeIntegrationInWorker
は nodeIntegration
とは独立して使用できますが、サンドボックス
は true
に設定してはなりません。
#
利用可能な APINode.js の組み込みモジュールはすべて Web Workers でサポートされており、asar
アーカイブは Node.js API で読み取ることができます。 しかし、Electron の組み込みモジュールは、マルチスレッド環境では使用できません。
#
ネイティブ Node.js モジュール任意のネイティブ Node.js モジュールを Web Workers に直接ロードできますが、そのようにしないことを強く推奨します。 既存のネイティブモジュールのほとんどはシングルスレッド環境を想定して作成されており、Web Workers でそれらを使用するとクラッシュやメモリ破壊につながります。
ネイティブ Node.js モジュールがスレッドセーフであっても、process.dlopen
関数はスレッドセーフではないため、Web Worker でロードするのは安全ではありません。
ネイティブモジュールを安全にロードする唯一の方法は、Web Workers の起動後にアプリがネイティブモジュールをロードしないようにすることです。
process.dlopen = () => { throw new Error('Load native module is not safe')}const worker = new Worker('script.js')