Multithreading
Con los Web Workers, es posible ejecutar JavaScript en threads a nivel de Sistema Operativo.
Multi-threaded Node.js
Es posible utilizar las características de Node.js en Electron's Web Workers. Para hacerlo, la opción nodeIntegrationInWorker
debe configurarse a true
en webPreferences
.
const win = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
})
El nodeIntegrationInWorker
puede ser utilizado independientemente de nodeIntegration
, pero sandbox
no debe ser configurado a true
.
Note: This option is not available in SharedWorker
s or Service Worker
s owing to incompatibilities in sandboxing policies.
APIs disponibles
Todos los módulos incorporados de Node.js son compatibles con Web Workers, y los archivos asar
aún se pueden leer con la API de Node.js. Sin embargo, ninguno de los módulos incorporados de Electron puede utilizarse en un entorno multiproceso.
Módulos nativos de Node.js
Cualquier módulo nativo Node.js se puede cargar directamente en Web Workers, pero se recomienda encarecidamente no hacerlo. La mayoría de los módulos nativos existentes se han escrito suponiendo un entorno de subproceso único, su uso en Web Workers dará lugar a bloqueos y daños en la memoria.
Tenga en cuenta que incluso si un módulo nativo de Node.js es un subproceso seguro, aún asi todavia no es seguro cargarlo en una Web Worker porque la función process.dlopen
no es un subproceso seguro.
La única forma de cargar un módulo nativo de forma segura por ahora es asegurarse de que la aplicación no carga módulos nativos después de que Web Workers se inicie.
process.dlopen = () => {
throw new Error('Load native module is not safe')
}
const worker = new Worker('script.js')