Page MenuHomePhorge

bench_object_spread.cjs
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

bench_object_spread.cjs

const now = () =>
typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now();
function bench(name, fn, iters = 1) {
fn();
const t0 = now();
for (let i = 0; i < iters; i++) fn();
const dt = now() - t0;
const per = (dt / iters).toFixed(6);
console.log(`${name}: ${dt.toFixed(2)} ms total, ${per} ms/iter (${iters} iters)`);
}
const visibleSymbol = Symbol('visible');
const getterSymbol = Symbol('getter');
function makePlainSource() {
return {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
};
}
function makeMixedSource() {
return {
a: 1,
b: 2,
c: 3,
d: 4,
[visibleSymbol]: 5,
};
}
function makeGetterSource() {
const obj = {
a: 1,
b: 2,
c: 3,
d: 4,
};
Object.defineProperty(obj, getterSymbol, {
enumerable: true,
get() {
return 42;
},
});
return obj;
}
function spreadPlain() {
const src = makePlainSource();
return { ...src };
}
function spreadMixedSymbol() {
const src = makeMixedSource();
return { ...src };
}
function spreadSymbolGetter() {
const src = makeGetterSource();
return { ...src };
}
console.log('=== Object Spread Benchmark ===\n');
bench('spread plain object', spreadPlain, 200_000);
bench('spread enumerable symbol', spreadMixedSymbol, 200_000);
bench('spread enumerable symbol getter', spreadSymbolGetter, 100_000);

File Metadata

Mime Type
application/javascript
Expires
Sat, May 2, 7:38 PM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
542382
Default Alt Text
bench_object_spread.cjs (1 KB)

Event Timeline