90 lines
2.3 KiB
Markdown
90 lines
2.3 KiB
Markdown
|
# webworkify
|
||
|
|
||
|
launch a web worker that can require() in the browser with browserify
|
||
|
|
||
|
# example
|
||
|
|
||
|
First, a `main.js` file will launch the `worker.js` and print its output:
|
||
|
|
||
|
``` js
|
||
|
var work = require('webworkify');
|
||
|
|
||
|
var w = work(require('./worker.js'));
|
||
|
w.addEventListener('message', function (ev) {
|
||
|
console.log(ev.data);
|
||
|
});
|
||
|
|
||
|
w.postMessage(4); // send the worker a message
|
||
|
```
|
||
|
|
||
|
then `worker.js` can `require()` modules of its own. The worker function lives
|
||
|
inside of the `module.exports`:
|
||
|
|
||
|
``` js
|
||
|
var gamma = require('gamma');
|
||
|
|
||
|
module.exports = function (self) {
|
||
|
self.addEventListener('message',function (ev){
|
||
|
var startNum = parseInt(ev.data); // ev.data=4 from main.js
|
||
|
|
||
|
setInterval(function () {
|
||
|
var r = startNum / Math.random() - 1;
|
||
|
self.postMessage([ startNum, r, gamma(r) ]);
|
||
|
}, 500);
|
||
|
});
|
||
|
};
|
||
|
```
|
||
|
|
||
|
Now after [browserifying](http://browserify.org) this example, the console will
|
||
|
contain output from the worker:
|
||
|
|
||
|
```
|
||
|
[ 4, 0.09162078520553618, 10.421030346237066 ]
|
||
|
[ 4, 2.026562457360466, 1.011522336481017 ]
|
||
|
[ 4, 3.1853125018703716, 2.3887589540750214 ]
|
||
|
[ 4, 5.6989969260510005, 72.40768854476167 ]
|
||
|
[ 4, 8.679491643020487, 20427.19357947782 ]
|
||
|
[ 4, 0.8528139834191428, 1.1098187157762498 ]
|
||
|
[ 4, 8.068322137547542, 5785.928308309402 ]
|
||
|
...
|
||
|
```
|
||
|
|
||
|
# methods
|
||
|
|
||
|
``` js
|
||
|
var work = require('webworkify')
|
||
|
```
|
||
|
|
||
|
## var w = work(require(modulePath))
|
||
|
|
||
|
Return a new
|
||
|
[web worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker)
|
||
|
from the module at `modulePath`.
|
||
|
|
||
|
The file at `modulePath` should export its worker code in `module.exports` as a
|
||
|
function that will be run with no arguments.
|
||
|
|
||
|
Note that all the code outside of the `module.exports` function will be run in
|
||
|
the main thread too so don't put any computationally intensive code in that
|
||
|
part. It is necessary for the main code to `require()` the worker code to fetch
|
||
|
the module reference and load `modulePath`'s dependency graph into the bundle
|
||
|
output.
|
||
|
|
||
|
## Worker.objectURL
|
||
|
|
||
|
The worker `w` returned by `webworkify` has the property `objectURL` attached.
|
||
|
`w.objectURL` refers to the Object URL that was used to pass the module's source
|
||
|
to the worker, and can be cleaned up using `URL.revokeObjectURL()`. (See [example](https://github.com/substack/webworkify/blob/master/example/main.js))
|
||
|
|
||
|
# install
|
||
|
|
||
|
With [npm](https://npmjs.org) do:
|
||
|
|
||
|
```
|
||
|
npm install webworkify
|
||
|
```
|
||
|
|
||
|
# license
|
||
|
|
||
|
MIT
|