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);
}