Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
JSON.parse(JSON.stringify()) vs. cloneDeep vs. custom clone
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Browser:
Chrome 134
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
11 months ago
Test name
Executions per second
myCopy = JSON.parse(JSON.stringify(MyObject));
1449984.1 Ops/sec
myCopy = _.cloneDeep(MyObject);
1748214.2 Ops/sec
myCopy = ObjectUtils.clone(MyObject);
4035111.0 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js'></script>
Script Preparation code:
const MyObject = { description: 'Creates a deep copy of source, which should be an object or an array.', myNumber: 123456789, myBoolean: true, jayson: { stringify: 'JSON.stringify() method converts a JavaScript value to a JSON string....', parse: 'JSON.parse() method parses a JSON string...' } }; let myCopy = null; /////////////////////////////////////////////////////////////////// class ObjectUtils { static clone(obj) { let clone if (typeof obj !== 'object') { return obj } if (!obj) { return obj } if (Array.isArray(obj)) { clone = [] for (let i = 0; i < obj.length; i += 1) { clone[i] = ObjectUtils.clone(obj[i]) } return clone } clone = {} Object.keys(obj).forEach((key) => { if (Object.prototype.hasOwnProperty.call(obj, key)) { clone[key] = ObjectUtils.clone(obj[key]) } }) return clone } }
Tests:
myCopy = JSON.parse(JSON.stringify(MyObject));
myCopy = JSON.parse(JSON.stringify(MyObject));
myCopy = _.cloneDeep(MyObject);
myCopy = _.cloneDeep(MyObject);
myCopy = ObjectUtils.clone(MyObject);
myCopy = ObjectUtils.clone(MyObject);