99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
|
// Copyright 2022 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
const props = {
|
||
|
key: 'abc',
|
||
|
ref: 1234,
|
||
|
a: 10,
|
||
|
b: 20,
|
||
|
c: 30,
|
||
|
d: 40,
|
||
|
e: 50
|
||
|
};
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Benchmark: Babel
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function _objectWithoutProperties(source, excluded) {
|
||
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||
|
var key, i;
|
||
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||
|
key = sourceSymbolKeys[i];
|
||
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||
|
target[key] = source[key];
|
||
|
}
|
||
|
return target;
|
||
|
}
|
||
|
|
||
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
||
|
var target = {};
|
||
|
var sourceKeys = Object.keys(source);
|
||
|
var key, i;
|
||
|
for (i = 0; i < sourceKeys.length; i++) {
|
||
|
key = sourceKeys[i];
|
||
|
if (excluded.indexOf(key) >= 0) continue;
|
||
|
target[key] = source[key];
|
||
|
}
|
||
|
return target;
|
||
|
}
|
||
|
function Babel() {
|
||
|
const key = props.key;
|
||
|
const ref = props.ref;
|
||
|
const normalizedProps = _objectWithoutProperties(props, ['key', 'ref']);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Benchmark: ForLoop
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function ForLoop() {
|
||
|
const key = props.key;
|
||
|
const ref = props.ref;
|
||
|
const normalizedProps = {};
|
||
|
for (let i in props) {
|
||
|
if (i != 'key' && i != 'ref') {
|
||
|
normalizedProps[i] = props[i];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Benchmark: DestructuringAssignment
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function DestructuringAssignment() {
|
||
|
const {key, ref, ...normalizedProps} = props;
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Setup and Run
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
d8.file.execute('../base.js');
|
||
|
|
||
|
var success = true;
|
||
|
|
||
|
function PrintResult(name, result) {
|
||
|
print(name + '-ObjectDestructuringAssignment(Score): ' + result);
|
||
|
}
|
||
|
|
||
|
function PrintError(name, error) {
|
||
|
PrintResult(name, error);
|
||
|
success = false;
|
||
|
}
|
||
|
|
||
|
function CreateBenchmark(name, f) {
|
||
|
new BenchmarkSuite(name, [100], [new Benchmark(name, false, false, 0, f)]);
|
||
|
}
|
||
|
|
||
|
CreateBenchmark('Babel', Babel);
|
||
|
CreateBenchmark('ForLoop', ForLoop);
|
||
|
CreateBenchmark('DestructuringAssignment', DestructuringAssignment);
|
||
|
|
||
|
BenchmarkSuite.config.doWarmup = undefined;
|
||
|
BenchmarkSuite.config.doDeterministic = undefined;
|
||
|
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|