Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
private properties in weakmap vs symbol vs # class syntax
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
Browser:
Firefox 139
Operating system:
Windows
Device Platform:
Desktop
Date tested:
11 months ago
Test name
Executions per second
Class
5153154.5 Ops/sec
WeakMap
4626445.5 Ops/sec
Symbols
5303464.0 Ops/sec
Script Preparation code:
class Person { static #counter = 0 #age constructor(name, age) { this.name = name; this.#age = age; } showPublic() { return this.name; } showPrivate() { return this.#age; } } window.__person = new Person("j", 22) // WeakMap const privKs = new WeakMap(); const proto = { showPrivate() { return privKs.get(this).age }, showPublic() { return this.name } } function User(name, age) { const obj = {name, age} privKs.set(obj, {age}) return Object.setPrototypeOf(obj, proto) } window.__user = User("j", 11) // Symbols const priv_ = Symbol("private data") const proto2 = { showPrivate() { return this[priv_].age }, showPublic() { return this.name } } function Teacher(name, age) { const obj = {name, [priv_]: {age}} return Object.setPrototypeOf(obj, proto2) } window.__teacher = Teacher("j", 22)
Tests:
Class
window.__person.showPrivate()
WeakMap
window.__user.showPrivate()
Symbols
window.__teacher.showPrivate()