Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Nested object proxy - getting
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Browser:
Chrome 122
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
2 years ago
Test name
Executions per second
Get generated property with eval
5233.7 Ops/sec
Get property
5241.9 Ops/sec
Get dynamic property
5046.5 Ops/sec
Get field
5314.3 Ops/sec
Nothing
16027.0 Ops/sec
Get generated property with Function ctor
3050.6 Ops/sec
Script Preparation code:
var objs = []; var proxProp = []; var proxDyn = []; var proxEval = []; var proxFunc = []; var count = 1000; var a, b, c; class ProxProp { constructor(data) { this.data = data } get a() { return this.data.a; } get b() { return this.data.b; } get c() { return this.data.c; } set a(v) { this.data.a = v; } set b(v) { this.data.b = v; } set c(v) { this.data.c = v; } } const ProxEval = eval(`class ProxEval { constructor(data) { this.data = data } get a() { return this.data.a; } get b() { return this.data.b; } get c() { return this.data.c; } set a(v) { this.data.a = v; } set b(v) { this.data.b = v; } set c(v) { this.data.c = v; } }; ProxEval; `); const ProxFunc = new Function(`return class ProxFunc { constructor(data) { this.data = data } get a() { return this.data.a; } get b() { return this.data.b; } get c() { return this.data.c; } set a(v) { this.data.a = v; } set b(v) { this.data.b = v; } set c(v) { this.data.c = v; } }; `); class ProxDyn { constructor(data) { this.data = data } } ["a", "b", "c"].forEach(n=> Object.defineProperty(ProxDyn.prototype, n, { get() { return this.data[n]; }, set(v) { this.data[n] = v; }, })); for (let i = 0; i < count; i++) { const obj = { a: Math.random(), b: new Date, c: Date.now().toString() }; objs.push(obj); proxProp.push(new ProxProp(obj)); proxDyn.push(new ProxDyn(obj)); proxEval.push(new ProxEval(obj)); proxFunc.push(new ProxFunc(obj)); }
Tests:
Get generated property with eval
for (let i = 0; i < proxEval.length; i++) { const obj = proxEval[i]; a = obj.a; b = obj.b; c = obj.c; }
Get property
for (let i = 0; i < proxProp.length; i++) { const obj = proxProp[i]; a = obj.a; b = obj.b; c = obj.c; }
Get dynamic property
for (let i = 0; i < proxDyn.length; i++) { const obj = proxDyn[i]; a = obj.a; b = obj.b; c = obj.c; }
Get field
for (let i = 0; i < objs.length; i++) { const obj = objs[i]; a = obj.a; b = obj.b; c = obj.c; }
Nothing
for (let i = 0; i < objs.length; i++) { const obj = objs[i]; }
Get generated property with Function ctor
for (let i = 0; i < proxFunc.length; i++) { const obj = proxFunc[i]; a = obj.a; b = obj.b; c = obj.c; }