fdsgsdg1251515

JavaScript performance comparison

Test case created

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' && (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;
        };
      }());
    }
   
    if (!Object.keysaa) {
      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;
   
        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.keysb) {
        Object.keysb = function(obj){
            var r = [],
                prop;
            for (prop in obj) { Object.prototype.hasOwnProperty.call(obj, prop) && r.push(prop); }
            return r;
        }
    }
   
   
    if (!Object.keysbt) {
        Object.keysbt = function(obj){
            var r = [],
                prop;
            for (prop in obj) {
                if ( Object.prototype.hasOwnProperty.call(obj, prop) ) {
                                r[r.length] = prop;
                }
                }
            return r;
        }
    }
   
   
   
    if (!Object.keysc) {
      (function () {
        'use strict';
        var hasDontEnumBug = !({valueOf: null}).propertyIsEnumerable('valueOf'),
            dontEnums = [
              'toString',
              'toLocaleString',
              'valueOf',
              'hasOwnProperty',
              'isPrototypeOf',
              'propertyIsEnumerable',
              'constructor'
            ],
            dontEnumsLength = dontEnums.length;
       
        if (hasDontEnumBug) {
                Object.keysc = function (obj) {
                        if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
                                throw new TypeError('Object.keys called on non-object');
                        }
   
                        var r = [], prop, i;
   
                        for (prop in obj) {
                                if (hasOwnProperty.call(obj, prop)) {
                                        result[result.length] = prop;
                                }
                        }
   
                        for (i = 0; i < dontEnumsLength; i++) {
                                if (Object.prototype.hasOwnProperty.call(obj, dontEnums[i])) {
                                        result.push(dontEnums[i]);
                                }
                        }
                        return r;
            };
        } else {
            Object.keysc = function (obj) {
                        if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
                                throw new TypeError('Object.keys called on non-object');
                        }
                        var r = [], prop;
                       
                       
                        for (prop in obj) {
                                if (Object.prototype.hasOwnProperty.call(obj, prop)) {
                                        r[r.length] = prop;
                                }
                        }
                        return r;
                };
        }
      }());
    }
   
   
   
   
   
   
   
    if (!Object.keysd) {
      Object.keysd = (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) {
                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;
                                }
                        }
   
                        for (i = 0; i < dontEnumsLength; i++) {
                                if (Object.prototype.hasOwnProperty.call(obj, dontEnums[i])) {
                                        r[r.length] = dontEnums[i];
                                }
                        }
                        return r;
            };
        } else {
            return function (obj) {
                        if (typeof obj !== 'object') {
                                throw new TypeError('Object.keys called on non-object');
                        }
                        var r = [], prop;
                        for (prop in obj) {
                                if (Object.prototype.hasOwnProperty.call(obj, prop)) {
                                        r[r.length] = prop;
                                }
                        }
                        return r;
                };
        }
      }());
    }
   
    if (!Object.keyse) {
      (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.keyse =  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 (Object.prototype.hasOwnProperty.call(obj, dontEnums[i])) {
                                        r[r.length] = dontEnums[i];
                                }
                        }
                        return r;
            };
        } else {
            Object.keyse = function (obj) {
                        if (typeof obj !== 'object') {
                                throw new TypeError('Object.keys called on non-object');
                        }
                        var r = [], prop;
                        for (prop in obj) {
                                if (Object.prototype.hasOwnProperty.call(obj, prop)) {
                                        r[r.length] = prop;
                                }
                        }
                        return r;
                };
        }
      }());
    }
};
</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
d
Object.keysd(b);
pending…
MDN
Object.keysa(b);
pending…
&& push
Object.keysb(b);
pending…
2x function if enum
Object.keysc(b);
pending…
bt
Object.keysbt(b);
pending…
e
Object.keyse(b);
pending…
aa
Object.keysaa(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