setImmediate

Emulates setImmediate for Chrome and Firefox

by francisfortier

JavaScript

if (!window.setImmediate)
{
    window.setImmediate = (function() {
        
        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
        var URL = window.URL || window.webkitURL;
        
        var bb = new BlobBuilder();
        
        bb.append('self.onmessage = function(e) { ' +
                  '    for (var i = 0; i < e.data; i++) { ' +
                  '        self.postMessage(i); ' +
                  '    } ' +
                  '}');
        
        var worker = new Worker(URL.createObjectURL(bb.getBlob("text/javascript")));
        
        var callback;
        
        worker.addEventListener("message", function(event) {
            callback();
        }, false);
        
        return function(cb) {
            callback = cb;
            
            worker.postMessage(1);
        }
    })();
}

var z = 0;
var start = +new Date();

(function() {
    
    if (z++ < 920)
    {
        setImmediate(arguments.callee);
    }
    else
    {
        alert((+new Date - start) / 1000);
    }
    
})();