#! /usr/bin/env node const _ = require('lodash'); const { performance, } = require('perf_hooks'); const isValidInput = process.argv[2] !== "" && !isNaN(Number(process.argv[2])); const size = isValidInput ? Number(process.argv[2]) : 100000; const arr = new Array(size).fill({ key: { nestedKey: { deepNestedKey: { veryDeepNestedKey: { shitloadDeepNestedKey: { val: 10 } } } } } }) function optionalChainingBenchmarking(arr) { const t0 = performance.now(); for (let i = 0; i < size; i++) { const val = arr[i]?.key?.nestedKey?.deepNestedKey?.veryDeepNestedKey?.shitloadDeepNestedKey?.val } const t1 = performance.now(); console.log(`Call to read nested keys for ${size} objects using optional chaining took ${t1 - t0} milliseconds.`); } function underscoreGetBenchmarking(arr) { const t0 = performance.now(); for (let i = 0; i < size; i++) { const val = _.get(arr[i], "key.nestedKey.deepNestedKey.veryDeepNestedKey.shitloadDeepNestedKey.val") } const t1 = performance.now(); console.log(`Call to read nested keys for ${size} using _.get took ${t1 - t0} milliseconds.`); } optionalChainingBenchmarking(arr); underscoreGetBenchmarking(arr);