My very first web worker
Serializing the shit out of everything!
by Ryan Morris
HTML
<p><button>Post message</button></p>
<script type="text/ww">
function kickoff(e) {
self.postMessage('Direct: ' + String(Date.now()/1000));
self.postMessage(JSON.stringify(e));
setTimeout(function() {
self.postMessage('Delayed, auto: ' + String(Date.now()/1000));
}, Math.random() * 2000);
}
self.onmessage = function(e) {
kickoff(e);
};
</script>
JavaScript
try {
var ww = document.querySelector('script[type="text/ww"]'),
code = ww.textContent,
blob = new Blob([code], {type: 'text/javascript'}),
blobUrl = URL.createObjectURL(blob),
worker = new Worker(blobUrl);
var _start,
btn = document.querySelector('button');
worker.onmessage = function(e) {
var _time = (Date.now() - _start) / 1000;
console.log(_time, e, e.data);
var log = document.createElement('p');
log.innerHTML = 'Roundtrip took ' + _time + ' sec. Response: <pre>' + e.data + '</pre>';
document.body.appendChild(log);
};
btn.onclick = function(e) {
var o = {name: 'rudie'};
_start = Date.now();
worker.postMessage(o);
};
}
catch (ex) {
alert(ex);
}