route

JavaScript performance comparison

Test case created by ryanve

Info

If ukn is an array-like object, then call fn on each ukn. Otherwise call fn it on ukn. The ukn is returned unchanged.

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var nativeForEach = []['forEach'];
    function route_viaForEach(ukn, fn) {
                var i = 0, l;
                if (!ukn || typeof ukn !== 'object' || (l = ukn.length) !== +l) {
                        fn(ukn);
                }
                if (nativeForEach && ukn['forEach'] === nativeForEach) {
                        ukn['forEach'](fn);
                }
                else {
                        while (i < l) {// closure compiler minifies this like: for(;i<L;)
                                if (i in ukn) {
                                        fn(ukn[i], i++, ukn);
                                }
                        }
                }
                return ukn;
        }
   
    function route_viaLoop(ukn, fn) {
                var i = 0, l;
                if (!ukn || typeof ukn !== 'object' || (l = ukn.length) !== +l) {
                        fn(ukn);
                }
            else {
                while (i < l) {// closure compiler minifies this like: for(;i<L;)
                        if (i in ukn) {
                                fn(ukn[i++]);
                                    // fn(ukn[i], i++, ukn);
                        }
                }
             }
                return ukn;
        }
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
route_viaForEach
route_viaForEach([1, 2, 3, 4], isFinite);
pending…
route_viaLoop
route_viaLoop([1, 2, 3, 4], isFinite);
pending…

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

Compare results of other browsers

0 comments

Add a comment