Object access per construction way

Benchmark created on


Description

Tests property access performance for objects constructed in various ways

Setup

class PredefinedProperties {
  foo;
  bar;
  baz;
  constructor(foo, bar, baz) {
    this.foo = foo;
    this.bar = bar;
    this.baz = baz;
  }
}

class OnlyConstructor {
  constructor(foo, bar, baz) {
    this.foo = foo;
    this.bar = bar;
    this.baz = baz;
  }
}

const predefinedProperties = new PredefinedProperties(0, 0, 0);
const onlyConstructor = new OnlyConstructor(0, 0, 0);
const objectAtOnce = {foo: 0, bar: 0, baz: 0};
const objectIncrementally = {};
objectIncrementally.foo = 0;
objectIncrementally.bar = 0;
objectIncrementally.baz = 0;

let samples = [];
for (let i = 0; i < 1000; ++i) {
  samples.push([~~(Math.random() * 100), ~~(Math.random() * 100), ~~(Math.random() * 100)]);
}

function test(obj) {
  for (let i = 0; i < samples.length; ++i) {
    const sample = samples[i];
    obj.foo = obj.bar + obj.baz + sample[0];
    obj.bar = obj.foo + obj.baz + sample[1];
    obj.baz = obj.foo + obj.bar + sample[2];
  }
}

Test runner

Ready to run.

Testing in
TestOps/sec
Class with properties
test(predefinedProperties);
ready
Empty class
test(onlyConstructor);
ready
Object at once
test(objectAtOnce);
ready
Object incrementally
test(objectIncrementally);
ready

Revisions

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