Map vs Property Accessor
Date tested:
one year ago
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36
Test name
Executions per second
Class with Getters
90536.9 Ops/sec
Class with Props in Map
9377.5 Ops/sec
Benchmark definition (click to collapse):
Script Preparation code:
var HEROES = [ ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ["Tony", "Stark", 35, "Iron Man", ["Avengers"]], ["Peter", "Parker", 20, "Spiderman", ["Avengers"]], ["Steve", "Rogers", 80, "Captain America", ["Howling Commandos", "Avengers"]], ["Jessica", "Jones", 33, "Jewel", ["Defenders", "Avengers"]], ["Luke", "Cage", 34, "Power Man", ["Defenders", "Avengers"]], ]; class Superhero { #name; #lastName; #age; #alterEgo; #teams; constructor(name, lastName, age, alterEgo, teams) { this.#name = name; this.#lastName = lastName; this.#age = age; this.#alterEgo = alterEgo; this.#teams = teams; } get name() { return this.#name; } get lastName() { return this.#lastName; } get age() { return this.#age; } get alterEgo() { return this.#alterEgo; } get teams() { return this.#teams; } toObject() { return { age: this.age, alterEgo: this.alterEgo, lastName: this.lastName, name: this.name, teams: this.teams, }; } } class SuperheroWithMap { #props = new Map(); constructor(name, lastName, age, alterEgo, teams) { this.#props.set("name", name); this.#props.set("lastName", lastName); this.#props.set("age", age); this.#props.set("alterEgo", alterEgo); this.#props.set("teams", teams); } #getProp(key) { return this.#props.get(key); } getName = this.#getProp.bind(this, "name"); getLastName = this.#getProp.bind(this, "lastName"); getAge = this.#getProp.bind(this, "age"); getAlterEgo = this.#getProp.bind(this, "alterEgo"); getTeams = this.#getProp.bind(this, "teams"); toObject() { return { age: this.getAge(), alterEgo: this.getAlterEgo(), lastName: this.getLastName(), name: this.getName(), teams: this.getTeams(), }; } } function createSuperhero(props) { return new Superhero(...props); } function createSuperheroWithMap(props) { return new SuperheroWithMap(...props); }
Tests:
Class with Getters
HEROES.map(createSuperhero).map((hero) => hero.toObject());
Class with Props in Map
HEROES.map(createSuperheroWithMap).map((hero) => hero.toObject());
Open this result on MeasureThat.net