137 lines
2.7 KiB
JavaScript
137 lines
2.7 KiB
JavaScript
'use strict';
|
|
|
|
const Benchmark = require('benchmark');
|
|
const benchmarks = require('beautify-benchmark');
|
|
|
|
const suite = new Benchmark.Suite();
|
|
|
|
function getNestedValue(data, key) {
|
|
const keys = key.split('.');
|
|
for (let i = 0; typeof data === 'object' && i < keys.length; i++) {
|
|
data = data[keys[i]];
|
|
}
|
|
return data;
|
|
}
|
|
|
|
const resource = {
|
|
'model.user.foo.bar.aa': 'Hello',
|
|
model: {
|
|
user: {
|
|
fields: {
|
|
name: 'Real Name',
|
|
age: 'Age',
|
|
a: {
|
|
b: {
|
|
c: {
|
|
d: {
|
|
e: {
|
|
f: 'fff',
|
|
},
|
|
},
|
|
model: {
|
|
user: {
|
|
fields: {
|
|
name: 'Real Name',
|
|
age: 'Age',
|
|
a: {
|
|
b: {
|
|
c: {
|
|
d: {
|
|
e: {
|
|
f: 'fff',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
post: {
|
|
fields: {
|
|
title: 'Subject',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
model: {
|
|
user: {
|
|
fields: {
|
|
name: 'Real Name',
|
|
age: 'Age',
|
|
a: {
|
|
b: {
|
|
c: {
|
|
d: {
|
|
e: {
|
|
f: 'fff',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
post: {
|
|
fields: {
|
|
title: 'Subject',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
post: {
|
|
fields: {
|
|
title: 'Subject',
|
|
},
|
|
},
|
|
model: {
|
|
user: {
|
|
fields: {
|
|
name: 'Real Name',
|
|
age: 'Age',
|
|
a: {
|
|
b: {
|
|
c: {
|
|
d: {
|
|
e: {
|
|
f: 'fff',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
post: {
|
|
fields: {
|
|
title: 'Subject',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const fullKey = 'model.user.fields.a.b.c.d.e.f';
|
|
|
|
console.log('Deeps: ', fullKey.split('.').length);
|
|
|
|
// console.log('getNestedValue:', getNestedValue(resource, fullKey));
|
|
|
|
suite
|
|
|
|
.add('direct read a key', function() {
|
|
resource['model.user.foo.bar.aa'];
|
|
})
|
|
.add('by nested', function() {
|
|
getNestedValue(resource, fullKey);
|
|
})
|
|
.on('cycle', function(event) {
|
|
benchmarks.add(event.target);
|
|
})
|
|
.on('complete', function done() {
|
|
benchmarks.log();
|
|
})
|
|
.run({ async: false });
|