setImmediate Test (v8)

Revision 8 of this benchmark created on


Description

set immediate test

Preparation HTML

<script>
    setTimeout(function () {
        if (!window.setImmediate) {
            ui.benchmarks[0].options.defer = false;
        }
        if (!window.msSetImmediate) {
            ui.benchmarks[2].options.defer = false;
        }
        if (!window.MessageChannel) {
            ui.benchmarks[3].options.defer = false;
        } else {
            window.immediateChannel = new MessageChannel();
        }
        if ("onreadystatechange" in document.createElement("script")) {
            window.readyStateChange = true;
        } else {
            ui.benchmarks[4].options.defer = false;
        }

        if (!window.postMessage) {
            ui.benchmarks[5].options.defer = false;
        } else {
            window.immediateCallbacks = {};

            var onGlobalMessage = function (event) {
                if (event.source === window && event.data.indexOf('immediate') === 0) {
                    var handle = 'h' + event.data.substring(9);
                    immediateCallbacks[handle]();
                    delete immediateCallbacks[handle];
                }
            };

            if (window.addEventListener) {
                window.addEventListener("message", onGlobalMessage, false);
            } else {
                window.attachEvent("onmessage", onGlobalMessage);
            }
        }
    }, 0);
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
setImmediate
// async test
setImmediate(function () {
    deferred.resolve();
});
ready
setTimeout
// async test
setTimeout(function () {
    deferred.resolve();
}, 0);
ready
msSetImmediate
// async test
msSetImmediate(function () {
    deferred.resolve();
});
ready
MessageChannel
// async test
immediateChannel.port1.onmessage = function () {
    deferred.resolve();
};

immediateChannel.port2.postMessage();
ready
readyStateChange
// async test
var scriptEl = document.createElement("script");
scriptEl.onreadystatechange = function () {
    scriptEl.onreadystatechange = null;
    scriptEl.parentNode.removeChild(scriptEl);
    scriptEl = null;

    deferred.resolve();
};

document.documentElement.appendChild(scriptEl);
readyStateChange;
ready
postMessage
// async test
var handle = Math.random()

immediateCallbacks['h' + handle] = function () {
    deferred.thisWillFailSynchronously();
};

postMessage('immediate' + handle, "*");

immediateCallbacks['h' + handle] = function () {
    deferred.resolve();
};
ready
requestAnimationFrame
// async test
window.requestAnimationFrame(function(){
  deferred.resolve();
});
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.