Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
deep clone (bigger obj2)
(version: 2)
Comparing performance of:
parse vs cloneDeep vs clone
Created:
3 years ago
by:
Registered User
Jump to the latest result
Script Preparation code:
var obj = { lcGsJoyg: 923, rnyCpgBp: 0.14232913002745584, fRdJYycV: false, MhcXxAvs: 823, xsgPPMlh: null, random: { lcGsJoyg: 923, rnyCpgBp: 0.14232913002745584, fRdJYycV: false, MhcXxAvs: 823, xsgPPMlh: null, oiwmefHG: { UTUgyyYu: 0.8460004792043192, rFHXPYqw: null, eritVMnr: 0.21718792648430552, CmdVUytQ: { gPzaloRj: { vJGXVxJi: 724, GWoNVYgR: 'MtZHJ', NKYagqQy: null, dcENxKZF: 0.6580619745895702, wkcrUxzQ: 525, wdgfWxAt: { NWusGqvV: null, ocDTnuzA: { ireyJyPa: null, yBfgBsBF: true, ztkStRQt: 521, vIPrhOdP: { griUwbgI: 0.6655577562406807, lwnOKkjn: 'cQkIJ', QZZcwLJS: null, YHoBGUqM: 'UhtGd', iqcWrKdY: 0.20044669952640715, gJDPdldk: false, tDIfUrRm: 'AmJa' }, oajJQWPh: null, WNQzSlkO: 339, XctovUMs: { IMRZWJAL: 'imAem', SRZpRAES: 0.6581839734263002, nstaegiO: 'IAUTA', HXXWFiKI: 0.7565237544343479, OFtsaIuQ: null, HdVqUINd: true, cxYtCXsC: null } }, SjApjcJj: 0.41979165756875614, epIaqVXi: { oQwVxhtd: 0.48392401230685933, QDLIBEAH: 531, QwFecXMq: 0.09580261444084126, ZqdFSMfh: 'FIVHVE', AmKQZPtn: 0.4691995901700068, WAOnvuAW: 0.22911279743355517, cTroNQCg: { LtiZLnfc: true, QnQqXLCx: true, RwSeFGNT: 0.7892606890112777, acfSFjSC: 'nLKw', vkzyiybF: 762, mbHcTjTk: true, lpTXhJIu: 0.9044203649447724 } }, uszorzIa: 683, ZSXKrZcK: 589, EPIBxpda: false }, TAhWdyQI: { GmGlwadX: 0.07260820123948841, oUrEBIxh: false, QQVrfBgx: 'zHtTjJl', XVpvGtON: null, JpeRxiVu: 0.007310863658203104, rRaPAAoo: { XdyWuVLQ: 0.6644858232080231, jbNiHRoN: 979, UIzfbBVY: 'tgWe', RRBKfPBv: 0.4678891584339877, jkrRfnxD: 'ApqoGpi', tqbqMHjc: null, XNwMjMqz: false }, TWbSfQSL: 553 } }, bARzFicd: 371, voGDXchb: 0.404082207305148, czhHunfI: { PNJUgweg: true, aptcXaHr: 'ViLM', JCOHjPKW: 'LOnDG', EpSluekD: 'MNdzqj', kjzxbbtE: { gQRwBOFC: 26, zTHKGxpC: 'xMqaFQT', osxNVvGn: 0.9200386158505891, rhMbCUUz: 0.456411419439837, JLaOrbrA: 719, ONXnVuIH: 'FEzyY', KEPnDRhp: null }, gFOGssAr: true, YDoztSAx: false }, ncipQKiE: false, ORqLDzrJ: 678, VKbCMPyO: false }, LvesAdJX: false, MFRoToDJ: 377, sTaUMrMG: 'JEFnUl' }, PnRWMDwh: 'BphBF' }, oiwmefHG: { UTUgyyYu: 0.8460004792043192, rFHXPYqw: null, eritVMnr: 0.21718792648430552, CmdVUytQ: { gPzaloRj: { vJGXVxJi: 724, GWoNVYgR: 'MtZHJ', NKYagqQy: null, dcENxKZF: 0.6580619745895702, wkcrUxzQ: 525, wdgfWxAt: { NWusGqvV: null, ocDTnuzA: { ireyJyPa: null, yBfgBsBF: true, ztkStRQt: 521, vIPrhOdP: { griUwbgI: 0.6655577562406807, lwnOKkjn: 'cQkIJ', QZZcwLJS: null, YHoBGUqM: 'UhtGd', iqcWrKdY: 0.20044669952640715, gJDPdldk: false, tDIfUrRm: 'AmJa' }, oajJQWPh: null, WNQzSlkO: 339, XctovUMs: { IMRZWJAL: 'imAem', SRZpRAES: 0.6581839734263002, nstaegiO: 'IAUTA', HXXWFiKI: 0.7565237544343479, OFtsaIuQ: null, HdVqUINd: true, cxYtCXsC: null } }, SjApjcJj: 0.41979165756875614, epIaqVXi: { oQwVxhtd: 0.48392401230685933, QDLIBEAH: 531, QwFecXMq: 0.09580261444084126, ZqdFSMfh: 'FIVHVE', AmKQZPtn: 0.4691995901700068, WAOnvuAW: 0.22911279743355517, cTroNQCg: { LtiZLnfc: true, QnQqXLCx: true, RwSeFGNT: 0.7892606890112777, acfSFjSC: 'nLKw', vkzyiybF: 762, mbHcTjTk: true, lpTXhJIu: 0.9044203649447724 } }, uszorzIa: 683, ZSXKrZcK: 589, EPIBxpda: false }, TAhWdyQI: { GmGlwadX: 0.07260820123948841, oUrEBIxh: false, QQVrfBgx: 'zHtTjJl', XVpvGtON: null, JpeRxiVu: 0.007310863658203104, rRaPAAoo: { XdyWuVLQ: 0.6644858232080231, jbNiHRoN: 979, UIzfbBVY: 'tgWe', RRBKfPBv: 0.4678891584339877, jkrRfnxD: 'ApqoGpi', tqbqMHjc: null, XNwMjMqz: false }, TWbSfQSL: 553 } }, bARzFicd: 371, voGDXchb: 0.404082207305148, czhHunfI: { PNJUgweg: true, aptcXaHr: 'ViLM', JCOHjPKW: 'LOnDG', EpSluekD: 'MNdzqj', kjzxbbtE: { gQRwBOFC: 26, zTHKGxpC: 'xMqaFQT', osxNVvGn: 0.9200386158505891, rhMbCUUz: 0.456411419439837, JLaOrbrA: 719, ONXnVuIH: 'FEzyY', KEPnDRhp: null }, gFOGssAr: true, YDoztSAx: false }, ncipQKiE: false, ORqLDzrJ: 678, VKbCMPyO: false }, LvesAdJX: false, MFRoToDJ: 377, sTaUMrMG: 'JEFnUl' }, PnRWMDwh: 'BphBF' } function cloneDeep(value) { return cloneDeepHelper(value, new Map()); } function cloneDeepHelper(val, seen) { switch (toString.call(val)) { case "[object Array]": { if (seen.has(val)) return seen.get(val); const copy = val.slice(0); seen.set(val, copy); copy.forEach(function (child, i) { copy[i] = cloneDeepHelper(child, seen); }); return copy; } case "[object Object]": { if (seen.has(val)) return seen.get(val); const copy = Object.create(Object.getPrototypeOf(val)); seen.set(val, copy); Object.keys(val).forEach(key => { copy[key] = cloneDeepHelper(val[key], seen); }); return copy; } default: return val; } } function _isPlaceholder(a) { return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true; } function _cloneRegExp(pattern) { return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : '')); } function _curry1(fn) { return function f1(a) { if (arguments.length === 0 || _isPlaceholder(a)) { return f1; } else { return fn.apply(this, arguments); } }; } var type = _curry1(function type(val) { return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1); }); function _clone(value, refFrom, refTo, deep) { var copy = function copy(copiedValue) { var len = refFrom.length; var idx = 0; while (idx < len) { if (value === refFrom[idx]) { return refTo[idx]; } idx += 1; } refFrom[idx + 1] = value; refTo[idx + 1] = copiedValue; for (var key in value) { copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key]; } return copiedValue; }; switch (type(value)) { case 'Object': return copy({}); case 'Array': return copy([]); case 'Date': return new Date(value.valueOf()); case 'RegExp': return _cloneRegExp(value); default: return value; } } var clone = _curry1(function clone(value) { return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, [], [], true); });
Tests:
parse
JSON.parse(JSON.stringify(obj))
cloneDeep
cloneDeep(obj)
clone
clone(obj)
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (3)
Previous results
Fork
Test case name
Result
parse
cloneDeep
clone
Fastest:
N/A
Slowest:
N/A
Latest run results:
No previous run results
This benchmark does not have any results yet. Be the first one
to run it!
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
It appears that we have a JavaScript benchmarking result from a Chrome browser on Windows, with three test cases: `parse`, `cloneDeep`, and `clone`. The first column of the latest benchmark result shows the corresponding raw UA string for each test case. Here is the summary: * **Test Case:** `parse` * **Browser:** Chrome 109 * **Device Platform:** Desktop * **Operating System:** Windows * **Executions Per Second:** 20,689.51 * **Test Case:** `cloneDeep` * **Browser:** Chrome 109 * **Device Platform:** Desktop * **Operating System:** Windows * **Executions Per Second:** 8,685.21 * **Test Case:** `clone` * **Browser:** Chrome 109 * **Device Platform:** Desktop * **Operating System:** Windows * **Executions Per Second:** 5,274.92 The results suggest that the `parse` test case performs significantly better than the other two, with a nearly 4x difference in executions per second. Based on these benchmarking results alone, it is difficult to determine which implementation (`JSON.parse(JSON.stringify(obj))`, `cloneDeep`, or `clone`) is more efficient. However, we can infer that: * The `parse` test case outperforms the other two. * There are some variations in performance between `cloneDeep` and `clone`. To make a definitive conclusion about which implementation is better, further analysis would be required, such as examining the code, testing with different inputs, or running additional benchmarks.
Related benchmarks:
Lodash vs spread operator semi-deep clone
Deep Clone vs JSON.Stringify
deep clone - lodash vs ramda vs json (deep)
Deep clone object vs map
Comments
Confirm delete:
Do you really want to delete benchmark?