es6 destructuring vs lodash _.get string and array keys with toPath and manual caching
compare performance of _.get to es6 desu
Date tested:
one year ago
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Test name
Executions per second
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
wUmrLVWz
1.0 Ops/sec
Benchmark definition (click to collapse):
HTML Preparation code:
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>
Script Preparation code:
function destructuringFn(input) { const { contextMenu: { data: { documents = [] } = {} } = {} } = input; return documents; } function destructuringFnDynamic(input, key) { const { contextMenu: { data: { [key]: documents = [] } = {} } = {} } = input; return documents; } function lodashFn(input) { const documents = _.get(input, 'contextMenu.data.documents', []); return documents; } function lodashFnDynamic(input, key) { const documents = _.get(input, `contextMenu.data.${key}`, []); return documents; } function lodashFnDynamicArray(input, key) { const documents = _.get(input, ['contextMenu', 'data', 'key'], []); return documents; } let paths = {}; function lodashFnDynamicCachedArray(input, key) { paths[key] = paths[key] || _.toPath(`contextMenu.data.${key}`); const documents = _.get(input, paths[key], []); return documents; } function test(fn, input, key) { fn(input, key); }
Tests:
destructuring with defaults, empty input
test(destructuringFn, {});
lodash get, empty input
test(lodashFn, {});
destructuring with defaults, find item
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(destructuringFn, input);
lodash get, find item
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(lodashFn, input);
destructuring dynamic key
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(destructuringFn, input, 'documents');
lodash dynamic key
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(lodashFnDynamic, input, 'documents');
lodash dynamic key using array
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(lodashFnDynamicArray, input, 'documents');
lodash dynamic key using manually cached array
const input = { contextMenu: { data: { documents: [{ id: 'doc' }] } } }; test(lodashFnDynamicCachedArray, input, 'documents');
Open this result on MeasureThat.net