docs: Multithreading
This commit is contained in:
parent
a49af26e39
commit
ab83aa0bfd
3 changed files with 56 additions and 0 deletions
|
@ -15,6 +15,9 @@ exports.load = (appUrl) => {
|
||||||
height: 600,
|
height: 600,
|
||||||
autoHideMenuBar: true,
|
autoHideMenuBar: true,
|
||||||
backgroundColor: '#FFFFFF',
|
backgroundColor: '#FFFFFF',
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegrationInWorker: true
|
||||||
|
},
|
||||||
useContentSize: true
|
useContentSize: true
|
||||||
}
|
}
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
|
|
|
@ -215,6 +215,9 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
* `devTools` Boolean (optional) - Whether to enable DevTools. If it is set to `false`, can not use `BrowserWindow.webContents.openDevTools()` to open DevTools. Default is `true`.
|
* `devTools` Boolean (optional) - Whether to enable DevTools. If it is set to `false`, can not use `BrowserWindow.webContents.openDevTools()` to open DevTools. Default is `true`.
|
||||||
* `nodeIntegration` Boolean (optional) - Whether node integration is enabled. Default
|
* `nodeIntegration` Boolean (optional) - Whether node integration is enabled. Default
|
||||||
is `true`.
|
is `true`.
|
||||||
|
* `nodeIntegrationInWorker` Boolean (optional) - Whether node integration is
|
||||||
|
enabled in web workers. Default is `false`. More about this can be found
|
||||||
|
in [Multithreading](../tutorial/multithreading.md).
|
||||||
* `preload` String (optional) - Specifies a script that will be loaded before other
|
* `preload` String (optional) - Specifies a script that will be loaded before other
|
||||||
scripts run in the page. This script will always have access to node APIs
|
scripts run in the page. This script will always have access to node APIs
|
||||||
no matter whether node integration is turned on or off. The value should
|
no matter whether node integration is turned on or off. The value should
|
||||||
|
|
50
docs/tutorial/multithreading.md
Normal file
50
docs/tutorial/multithreading.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Multithreading
|
||||||
|
|
||||||
|
With [Web Workers][web-workers], it is possible to run JavaScript in OS-level
|
||||||
|
threads.
|
||||||
|
|
||||||
|
## Multi-threaded Node.js
|
||||||
|
|
||||||
|
In Electron, it is supported to use Node.js integration in Web Workers. To do
|
||||||
|
so the `nodeIntegrationInWorker` option should be set to `true` in
|
||||||
|
`webPreferences`.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let win = new BrowserWindow({
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegrationInWorker: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
The `nodeIntegrationInWorker` can be used independent of `nodeIntegration`, but
|
||||||
|
`sandbox` must not be set to `true`.
|
||||||
|
|
||||||
|
## Available APIs
|
||||||
|
|
||||||
|
All built-in modules of Node.js are supported in Web Workers, and `asar`
|
||||||
|
archives can still be read with Node.js APIs. However non of Electron's built-in
|
||||||
|
modules can be used in multi-threaded environment.
|
||||||
|
|
||||||
|
## Native Node.js modules
|
||||||
|
|
||||||
|
Any native Node.js module can be loaded directly in Web Workers, but it is
|
||||||
|
strongly recommended not to do so. Most existing native modules have been
|
||||||
|
written assuming single-thread environment, using them in a Web Workers will
|
||||||
|
lead to crashes and memory corruptions.
|
||||||
|
|
||||||
|
Even when using a thread-safe native Node.js module, it should be noticed that
|
||||||
|
the `process.dlopen` function is not thread safe, so loading a native module
|
||||||
|
in Web Workers is not thread safe.
|
||||||
|
|
||||||
|
The only way to load a native module safely for now, is to make sure the app
|
||||||
|
loads no native modules after the Web Workers get started.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
process.dlopen = () => {
|
||||||
|
throw new Error('Load native module is not safe')
|
||||||
|
}
|
||||||
|
new Worker('script.js')
|
||||||
|
```
|
||||||
|
|
||||||
|
[web-workers]: https://developer.mozilla.org/en/docs/Web/API/Web_Workers_API/Using_web_workers
|
Loading…
Add table
Add a link
Reference in a new issue