SharedWorke

by Maksim Kalenich

HTML

<script src="https://cdn.jsdelivr.net/gh/eu81273/jsfiddle-console/console.js"></script>
<script type="javascript/worker">
	let i = 0;
	onconnect = (ev) => {
		i++;
		let port = ev.ports[0];
		port.onmessage = (e) => {
			port.postMessage(`Result: ${e.data[0] * e.data[1]}`);
			port.postMessage(i);
		}
	};
</script>

JavaScript

function BlobWorker() {
  let js = document.querySelector('[type="javascript/worker"]').textContent;
  let blob = new Blob([js], {
    "type": "text/plain"
  });
  return URL.createObjectURL(blob);
}

if (!!window.SharedWorker) {
	let source = BlobWorker();
  let worker = new window.SharedWorker(source);
  worker.port.onmessage = (e) => {
    console.log(e.data, e.lastEventId);
  };
  worker.port.postMessage([3, 5]);
  console.log("Message posted to worker");
}