<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
function recursiveDeepCopy(obj) {
return Object.keys(obj).reduce((v, d) => Object.assign(v, {
[d]: (obj[d].constructor === Object) ? recursiveDeepCopy(obj[d]) : obj[d]
}), {});
}
function deepClone(object) {
let result;
let i;
let l;
if (typeof object !== 'object') {
return object;
}
if (!object) {
return object;
}
if (object.constructor === Array) {
result = [];
l = object.length;
for (i = 0; i < l; i++) {
result[i] = deepClone(object[i]);
}
return result;
}
result = {};
for (i in object) {
result[i] = deepClone(object[i]);
}
return result;
}
function jsonDeepCopy(o) {
return JSON.parse(JSON.stringify(o));
}
var dimensions = [{
"dimensions": [{
"runtime": {
"common": {
"client": null,
"server": null
}
}
}, {
"device": {
"android": null,
"blackberry": null,
"iemobile": null,
"iphone": null,
"ipad": null,
"kindle": null,
"opera-mini": null,
"palm": null
}
}, {
"environment": {
"development": {
"dev": null,
"test": null
},
"production": {
"stage": null,
"prod": null
}
}
}, {
"lang": {
"ar": {
"ar-JO": null,
"ar-MA": null,
"ar-SA": null,
"ar-EG": null
},
"bn": {
"bn-IN": null
},
"ca": {
"ca-ES": null
},
"cs": {
"cs-CZ": null
},
"da": {
"da-DK": null
},
"de": {
"de-AT": null,
"de-DE": null
},
"el": {
"el-GR": null
},
"en": {
"en-AU": null,
"en-BG": null,
"en-CA": null,
"en-GB": null,
"en-GY": null,
"en-HK": null,
"en-IE": null,
"en-IN": null,
"en-MY": null,
"en-NZ": null,
"en-PH": null,
"en-SG": null,
"en-US": null,
"en-ZA": null
},
"es": {
"es-AR": null,
"es-BO": null,
"es-CL": null,
"es-CO": null,
"es-EC": null,
"es-ES": null,
"es-MX": null,
"es-PE": null,
"es-PY": null,
"es-US": null,
"es-UY": null,
"es-VE": null
},
"fi": {
"fi-FI": null
},
"fr": {
"fr-BE": null,
"fr-CA": null,
"fr-FR": null,
"fr-GF": null
},
"hi": {
"hi-IN": null
},
"hu": {
"hu-HU": null
},
"id": {
"id-ID": null
},
"it": {
"it-IT": null
},
"ja": {
"ja-JP": null
},
"kn": {
"kn-IN": null
},
"ko": {
"ko-KR": null
},
"ml": {
"ml-IN": null
},
"mr": {
"mr-IN": null
},
"ms": {
"ms-MY": null
},
"nb": {
"nb-NO": null
},
"nl": {
"nl-BE": null,
"nl-NL": null,
"nl-SR": null
},
"pl": {
"pl-PL": null
},
"pt": {
"pt-BR": null
},
"ro": {
"ro-RO": null
},
"ru": {
"ru-RU": null
},
"sv": {
"sv-SE": null
},
"ta": {
"ta-IN": null
},
"te": {
"te-IN": null
},
"th": {
"th-TH": null
},
"tr": {
"tr-TR": null
},
"vi": {
"vi-VN": null
},
"zh": {
"zh-Hans": {
"zh-Hans-CN": null
},
"zh-Hant": {
"zh-Hant-HK": null,
"zh-Hant-TW": null
}
}
}
}]
}]
var dimensionsCopy = recursiveDeepCopy(dimensions);
var dimensionsCopy = jsonDeepCopy(dimensions);
var dimensionsCopy = _.cloneDeep(dimensions);
var dimensionsCopy = deepClone(dimensions);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Recursive Deep Copy | |
JSON Deep Copy | |
lodash clone | |
deepclone |
Test name | Executions per second |
---|---|
Recursive Deep Copy | 307750.5 Ops/sec |
JSON Deep Copy | 35505.8 Ops/sec |
lodash clone | 14009.0 Ops/sec |
deepclone | 27707.8 Ops/sec |
I'll do my best to help you with the code snippet and benchmark results.
Code Snippet Analysis
The provided JavaScript code snippet appears to be a template for benchmarking different methods of copying or cloning an object. It defines four test cases:
Recursive Deep Copy
JSON Deep Copy
(using jsonDeepCopy
function)lodash clone
(using Lodash's cloneDeep
function)deepclone
The code uses the dimensions
object as a sample input for these tests.
Benchmark Results Analysis
The benchmark results are provided in two formats:
Benchmark Definition
, Test Name
, and others.Both formats seem to contain the benchmark results for each test case, along with some metadata such as browser, device platform, operating system, executions per second, and test name.
Observations
From the provided data, I can observe that:
Recursive Deep Copy
test appears to be the fastest among all four tests.JSON Deep Copy
test is slightly slower than the recursiveDeepCopy
implementation but faster than the lodash clone
and deepclone
implementations.Please note that this analysis is based on limited data, and more information would be required to draw more concrete conclusions about the performance of these different cloning methods.