Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
property access: object with define property vs Proxy get vs plain object vs methods
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Browser:
Chrome 131
Operating system:
Windows
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Proxy
13578439.0 Ops/sec
defineProperty
38028076.0 Ops/sec
getter
30045120.0 Ops/sec
Proxy w/ Reflection
12609169.0 Ops/sec
Methods
95930040.0 Ops/sec
Control (plain object access)
99427176.0 Ops/sec
Script Preparation code:
const queryResults = { a: {}, b: [2, 3, 4], c: 3, d: { a: 1, b: [], }, }; window.queryResults = queryResults; window.trackedResultsReflect = new Proxy(queryResults, { get(target, prop, receiver) { return Reflect.get(target, prop, receiver); } }); window.trackedResultsProxy = new Proxy(queryResults, { get(target, prop, receiver) { return target[prop]; } }); window.trackedResultsDefineProperty = {}; for (const key of Object.keys(queryResults)) { Object.defineProperty(trackedResultsDefineProperty, key, { configurable: false, enumerable: true, get() { return queryResults[key]; }, }); } window.trackedResultsMethods = { getC() { return queryResults.c; }, getD() { return queryResults.d; } } window.trackedResultsGetter = { get c() { return queryResults.c; }, get d() { return queryResults.d; } }
Tests:
Proxy
window.trackedResultsProxy.d.a + window.trackedResultsProxy.c
defineProperty
window.trackedResultsDefineProperty.d.a + window.trackedResultsDefineProperty.c
getter
window.trackedResultsGetter.d.a + window.trackedResultsGetter.c
Proxy w/ Reflection
window.trackedResultsReflect.d.a + window.trackedResultsReflect.c
Methods
window.trackedResultsMethods.getD().a + window.trackedResultsMethods.getC()
Control (plain object access)
window.queryResults.d.a + window.queryResults.c