Lazy web workers only work when someone is watching - in the UI thread!
IE<10 doesn't support web workers. By using a lazy-worker, you can code to the web workers spec even on IE.
Since lazy-worker only overwrites the global Worker object if it doesn't already exist, lazy-worker can be used both in browsers that have native web worker support and those that don't. The global Worker object can be manually overridden by calling lazyWorker.exportWorker(). Alternatively, the lazyWorker.Worker constructor can be used directly to create lazy workers.
- Chrome 21+
- Firefox 14+
- Safari 5+
- Opera 12+
- Internet Explorer 9+
The test.html file needs to be hosted by a server and not open from the local file system. If you have ruby, run ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start" in the top level directory and open http://localhost:9090/test/test.html.
Alternatively, the tests can be run using the grunt build tool command grunt qunit.
- Creating workers
- Both the
Workerconstructor and any lazy-worker instances will have alazyproperty set totrue
- Both the
- Sending messages
- Only the
onmessagefunction is supported. lazy-worker might support theaddEventListenermethod in the future.
- Only the
- Loading scripts within workers using the
importScriptsfunction - Error handling within workers using the
onerrorfunction - Nested workers
// In main.js
Worker.lazy; // true
var worker = new Worker('my-worker.js');
worker.lazy; // true
worker.onmessage = function(msg) {
console.log(msg.data.foo);
};
worker.onerror = function(err) {
console.log('Error: ', err.type, err.message);
};
worker.postMessage({
foo: 'foo'
});// In my-worker.js
self.importScripts('my-helper-script.js');
self.onmessage = function(msg) {
var foo = msg.data.foo + 'bar';
self.postMessage({
foo: foo
});
};