freeze vs pseudo-freeze vs normal (v14)

Revision 14 of this benchmark created on


Preparation HTML

<script>

var o = {
    i: 42,
    s: 3,
    n: 5,
    r: 7,
    a: [1, 2, 3],
    f: function (i) {
        return i;
    }
};
var f = {
    i: 42,
    s: 3,
    n: 5,
    r: 7,
    a: [1, 2, 3],
    f: function (i) {
        return i;
    }
};

var pe = {
    i: 42,
    s: 3,
    n: 5,
    r: 7,
    a: [1, 2, 3],
    f: function (i) {
        return i;
    }
};

Object.freeze(f);

Object.preventExtensions(pe);
function pseudoFreeze(obj) {
    Object.preventExtensions(obj);
    Object.keys(obj).forEach(function (key) {
        var descriptor = Object.getOwnPropertyDescriptor(obj, key);
        descriptor.writable = false;
        descriptor.configurable = false;
        Object.defineProperty(obj, key, descriptor);
    });
}

var pf = {
    i: 42,
    s: 3,
    n: 5,
    r: 7,
    a: [1, 2, 3],
    f: function (i) {
        return i;
    }
};

pseudoFreeze(pf);

var pff = {
    i: 42,
    s: 3,
    n: 5,
    r: 7,
    a: [1, 2, 3],
    f: function (i) {
        return i;
    }
};

pseudoFreeze(pff);
Object.freeze(pff);
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
normal
var r = o.i + o.s + o.n + o.r;
o.f(r);
ready
freeze
var q = f.i + f.s + f.n + f.r;
f.f(q);
ready
preventExtensions
var q = pe.i + pe.s + pe.n + pe.r;
pe.f(q);
ready
pseudo-freeze + freeze
var q = pff.i + pff.s + pff.n + pff.r;
pff.f(q);
ready

Revisions

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