Skip to content

Instantly share code, notes, and snippets.

@fijiwebdesign
Last active February 12, 2017 09:56
Show Gist options
  • Save fijiwebdesign/f768ce3b8dceac14857a67d384fb9d73 to your computer and use it in GitHub Desktop.
Save fijiwebdesign/f768ce3b8dceac14857a67d384fb9d73 to your computer and use it in GitHub Desktop.
Shared WebWorker example
/**
* Shared Web Worker
* see: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
* https://www.sitepoint.com/javascript-shared-web-workers-html5/
*/
// note: we can't share this webworker from another tab or window.
// since window.URL.createObjectURL() creates URL refs in the scope of the local window/tab
// inline our file
var blob = new Blob([
`var connections = 0;
self.addEventListener("connect", function (e) {
var port = e.ports[0];
connections++;
port.postMessage("hello " + e.data + " (port #" + connections + ")");
port.addEventListener("message", function (e) {
port.postMessage("Message " + e.data + " (port #" + connections + ")");
}, false);
port.start();
}, false);`
]);
// Obtain a blob URL reference to our worker 'file'.
var blobURL = window.URL.createObjectURL(blob);
console.log('Using shared worker at', blobURL)
var worker = new SharedWorker(blobURL);
worker.port.addEventListener("message", function(e) {
alert(e.data);
}, false);
worker.port.start();
worker.port.postMessage("can you hear me");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment