多线程¶
借助 Web Workers,可以在操作系统级线程中运行 JavaScript。
多线程 Node.js¶
可以在 Electron 的 Web Workers 中使用 Node.js 功能,为此,应在 webPreferences 中将 nodeIntegrationInWorker 选项设置为 true。
由 <iframe> 创建的 Worker 仅在该 frame 本身具有 Node.js 集成时才能获得 Node.js 集成,即同时启用了 nodeIntegrationInSubFrames 时。
nodeIntegrationInWorker 可以独立于 nodeIntegration 使用,但 sandbox 不能设置为 true。
[!NOTE] 由于沙箱策略不兼容,此选项不可用于
SharedWorkers 或Service Workers。
可用 API¶
Node.js 的所有内置模块都支持在 Web Workers 中使用,并且仍可使用 Node.js API 读取 asar 归档。但是,Electron 的内置模块均不能用于多线程环境。
原生 Node.js 模块¶
任何原生 Node.js 模块都可以直接在 Web Workers 中加载,但强烈建议不要这样做。大多数现有原生模块都是在假设单线程环境的情况下编写的,在 Web Workers 中使用它们会导致崩溃和内存损坏。
请注意,即使某个原生 Node.js 模块是线程安全的,在 Web Worker 中加载它仍然不安全,因为 process.dlopen 函数不是线程安全的。
目前,安全加载原生模块的唯一方法是确保应用在 Web Workers 启动后不再加载任何原生模块。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron