Object.defineProperty vs __defineGetter__ vs normal (v39)

Revision 39 of this benchmark created on


Description

Test different access method to an object property

Setup

function getter() { return this._x; }
    function setter(value) { this._x = value; }
    
    var acc = 0;
    var standardObj = { x: 0 }
    var definePropertyObj = { _x: 0 }
    var getterSetterObj = { _x: 0 }
    var getterSetterFnObj = { _x: 0 }
    var prototypeObj = { _x: 0 }
    
    var definePropertyObjPrototype = {};
    Object.defineProperty(definePropertyObjPrototype, "x_proto1", {
      get: getter,
      set: setter
    });
    definePropertyObj.prototype = definePropertyObjPrototype ;
    Object.defineProperty(definePropertyObj, "x", {
      get: getter,
      set: setter
    });
    
    var getterSetterObjPrototype = {}
    getterSetterObjPrototype .__defineGetter__("x_proto2", getter);
    getterSetterObjPrototype .__defineSetter__("x_proto2", setter);
    getterSetterObj.prototype = getterSetterObjPrototype;
    getterSetterObj.__defineGetter__("x", getter);
    getterSetterObj.__defineSetter__("x", setter);
    
    getterSetterFnObj.getX = getter;
    getterSetterFnObj.setX = setter;
    
    prototypeObj.prototype = {
     get x_proto3() { return this._x; }, 
     set x_proto3(value) { this._x = value; }
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Object.defineProperty on prototype
for (var i = 0; i < 1000; i++) {
 definePropertyObj.x_proto1 = i;
 acc += definePropertyObj.x_proto1;
}
ready
__defineGetter__ on instance
for (var i = 0; i < 1000; i++) {
 getterSetterObj.x = i;
 acc += getterSetterObj.x;
}
ready
Normal
for (var i = 0; i < 1000; i++) {
 standardObj.x = i;
 acc += standardObj.x;
}
ready
Prototype
for (var i = 0; i < 1000; i++) {
 prototypeObj.x_proto3 = i;
 acc += prototypeObj.x_proto3;
}
ready
Setter
for (var i = 0; i < 1000; i++) {
 getterSetterFnObj.setX(i);
 acc += getterSetterFnObj.getX();
}
ready
Object.defineProperty on instance
for (var i = 0; i < 1000; i++) {
 definePropertyObj.x = i;
 acc += definePropertyObj.x;
}
ready
__defineGetter__ on prototype
for (var i = 0; i < 1000; i++) {
 getterSetterObj.x_proto2 = i;
 acc += getterSetterObj.x_proto2;
}
ready

Revisions

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