Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Map vs Property Accessor
(version: 0)
Comparing performance of:
Class with Getters vs Class with Props in Map
Created:
3 years ago
by:
Registered User
Jump to the latest result
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());
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (2)
Previous results
Fork
Test case name
Result
Class with Getters
Class with Props in Map
Fastest:
N/A
Slowest:
N/A
Latest run results:
No previous run results
This benchmark does not have any results yet. Be the first one
to run it!
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
A challenging benchmarking scenario! After analyzing the provided code and test cases, I'll provide an answer to your question. **Question:** Which class, `Superhero` or `SuperheroWithMap`, is more efficient when it comes to serializing objects to JavaScript objects using `toObject()`? **Answer:** According to the benchmark results, the `Class with Getters` test case shows a significant performance difference between the two classes. The Chrome 93 browser executes the test at approximately 5720 executions per second. In contrast, the `Class with Props in Map` test case has much slower execution times, with Chrome 93 executing at around 2085 executions per second. This suggests that the `SuperheroWithMap` class is less efficient than the `Superhero` class when it comes to serializing objects to JavaScript objects using `toObject()`. The main reason for this difference lies in how the classes handle property access and serialization. The `Superhero` class uses getter methods, which are more efficient and straightforward to implement. On the other hand, the `SuperheroWithMap` class relies on a Map data structure, which introduces additional overhead when accessing properties. To improve performance, you can consider modifying the `SuperheroWithMap` class to use a similar approach to the `Superhero` class, such as using getter methods or storing properties in an object literal. Alternatively, you can optimize the `toObject()` method of the `SuperheroWithMap` class to reduce overhead when serializing objects. **Code suggestions:** To improve performance, consider modifying the `SuperheroWithMap` class to use a similar approach to the `Superhero` class: ```javascript class SuperheroWithMap { #props = {}; constructor(props) { this.#props.name = props.name; this.#props.lastName = props.lastName; this.#props.age = props.age; this.#props.alterEgo = props.alterEgo; this.#props.teams = props.teams; } get name() { return this.#props.name; } get lastName() { return this.#props.lastName; } get age() { return this.#props.age; } get alterEgo() { return this.#props.alterEgo; } get teams() { return this.#props.teams; } toObject() { return { name: this.name, lastName: this.lastName, age: this.age, alterEgo: this.alterEgo, teams: this.teams, }; } } ``` By using getter methods and an object literal, you can reduce overhead when serializing objects.
Related benchmarks:
for vs foreach
JSON stringification versus simple map
slice + mutation vs map
localeCompare vs function on array sort
Comments
Confirm delete:
Do you really want to delete benchmark?