fdsgsdg1251515

JavaScript performance comparison

Revision 2 of this test case created and last updated

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
     var a = {}, // short
            b = {}, // medium
            c = {}; // long
       
        for (var j = 0; j < 10; j += 1){
            a[j] = j;
        }
       
        for (var j = 0; j < 100; j += 1){
            b[j] = j;
        }
       
        for (var j = 0; j < 1000; j +=1 ){
            c[j] = j;
        }
   
    if (!Object.keysa) {
        Object.keysa = (function () {
            'use strict';
            var hasOwnProperty = Object.prototype.hasOwnProperty,
                    hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
                    dontEnums = [
                        'toString',
                        'toLocaleString',
                        'valueOf',
                        'hasOwnProperty',
                        'isPrototypeOf',
                        'propertyIsEnumerable',
                        'constructor'
                    ],
                    dontEnumsLength = dontEnums.length;
   
            return function (obj) {
                if (typeof obj !== 'object') {
                    throw new TypeError('Object.keys called on non-object');
                }
   
                var r = [], prop, i;
   
                for (prop in obj) {
                    if (hasOwnProperty.call(obj, prop)) {
                        r[r.length] = prop;
                    }
                }
   
                if (hasDontEnumBug) {
                    for (i = 0; i < dontEnumsLength; i++) {
                        if (hasOwnProperty.call(obj, dontEnums[i])) {
                            r[r.length] = prop;
                        }
                    }
                }
                return r;
            };
        }());
    }
   
   
    if (!Object.keysaa) {
        (function () {
            'use strict';
            var hasOwnProperty = Object.prototype.hasOwnProperty,
                    hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
                    dontEnums = [
                        'toString',
                        'toLocaleString',
                        'valueOf',
                        'hasOwnProperty',
                        'isPrototypeOf',
                        'propertyIsEnumerable',
                        'constructor'
                    ],
                    dontEnumsLength = dontEnums.length;
            if (hasDontEnumBug) {
   
                Object.keysaa = function (obj) {
                    if (typeof obj !== 'object') {
                        throw new TypeError('Object.keys called on non-object');
                    }
   
                    var r = [], prop, i;
   
                    for (prop in obj) {
                        if (hasOwnProperty.call(obj, prop)) {
                            r[r.length] = prop;
                        }
                    }
   
                    for (i = 0; i < dontEnumsLength; i++) {
                        if (hasOwnProperty.call(obj, dontEnums[i])) {
                            r[r.length] = prop;
                        }
                    }
                    return r;
                };
            } else {
                Object.keysaa = function (obj) {
                    if (typeof obj !== 'object') {
                        throw new TypeError('Object.keys called on non-object');
                    }
   
                    var r = [], prop, i;
   
                    for (prop in obj) {
                        if (hasOwnProperty.call(obj, prop)) {
                            r[r.length] = prop;
                        }
                    }
                    return r;
                };
            }
        }());
    }
   
   
   
    if (!Object.keysaaa) {
        (function () {
            'use strict';
            var hasOwnProperty = Object.prototype.hasOwnProperty,
                    hasDontEnumBug = !({valueOf: null}).propertyIsEnumerable('valueOf'),
                    dontEnums = [
                        'toString',
                        'toLocaleString',
                        'valueOf',
                        'hasOwnProperty',
                        'isPrototypeOf',
                        'propertyIsEnumerable',
                        'constructor'
                    ],
                    dontEnumsLength = dontEnums.length;
            if (hasDontEnumBug) {
   
                Object.keysaaa = function (obj) {
                    if (typeof obj !== 'object') {
                        throw new TypeError('Object.keys called on non-object');
                    }
   
                    var r = [], prop, i;
   
                    for (prop in obj) {
                        if (hasOwnProperty.call(obj, prop)) {
                            r[r.length] = prop;
                        }
                    }
   
                    for (i = 0; i < dontEnumsLength; i++) {
                        if (hasOwnProperty.call(obj, dontEnums[i])) {
                            r[r.length] = prop;
                        }
                    }
                    return r;
                };
            } else {
                Object.keysaaa = function (obj) {
                    if (typeof obj !== 'object') {
                        throw new TypeError('Object.keys called on non-object');
                    }
   
                    var r = [], prop;
   
                    for (prop in obj) {
                        if (hasOwnProperty.call(obj, prop)) {
                            r[r.length] = prop;
                        }
                    }
                    return r;
                };
            }
        }());
    }
   
   
   
   
    if (!Object.keysmdn) {
      Object.keysmdn = (function () {
        'use strict';
        var hasOwnProperty = Object.prototype.hasOwnProperty,
            hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
            dontEnums = [
              'toString',
              'toLocaleString',
              'valueOf',
              'hasOwnProperty',
              'isPrototypeOf',
              'propertyIsEnumerable',
              'constructor'
            ],
            dontEnumsLength = dontEnums.length;
   
        return function (obj) {
          if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
            throw new TypeError('Object.keys called on non-object');
          }
   
          var result = [], prop, i;
   
          for (prop in obj) {
            if (hasOwnProperty.call(obj, prop)) {
              result.push(prop);
            }
          }
   
          if (hasDontEnumBug) {
            for (i = 0; i < dontEnumsLength; i++) {
              if (hasOwnProperty.call(obj, dontEnums[i])) {
                result.push(dontEnums[i]);
              }
            }
          }
          return result;
        };
      }());
    }
};
</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
a
Object.keysa(b);
pending…
aa
Object.keysaa(b);
pending…
mdn
Object.keysmdn(b);
pending…
aaa
Object.keysaaa(b);
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment