Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
lodash cloneDeep vs. structuredClone vs. recursiveDeepCopy
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:
one year ago
Test name
Executions per second
lodash cloneDeep
1845975.6 Ops/sec
JSON.parse(JSON.stringify())
1586476.0 Ops/sec
recursiveDeepCopy
5341361.0 Ops/sec
structuredClone
747519.0 Ops/sec
rfdc
6468581.5 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js'></script> <script src='https://cdn.jsdelivr.net/npm/jsondiffpatch@0.4.1/dist/jsondiffpatch.umd.min.js'></script> <script src='https://cdn.jsdelivr.net/npm/rfdc@1.3.0'></script>
Script Preparation code:
var 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...' } }; var myCopy = null; var rfdcClone = rfdc(); /////////////////////////////////////////////////////////////////// function recursiveDeepCopy(value) { if (value instanceof Date) { return new Date(value); } if (value instanceof RegExp) { return new RegExp(value); } if (value instanceof Map) { return new Map(value); } if (value instanceof Set) { return new Set(value); } if (typeof value !== 'object') { return value; } if (!value) { return value; } let newObject; if ('[object Array]' === Object.prototype.toString.apply(value)) { newObject = []; for (let i = 0; i < value.length; i += 1) { newObject[i] = recursiveDeepCopy(value[i]); } return newObject; } newObject = {}; for (let i in value) { if (value.hasOwnProperty(i)) { newObject[i] = recursiveDeepCopy(value[i]); } } return newObject; }
Tests:
lodash cloneDeep
myCopy = _.cloneDeep(MyObject);
JSON.parse(JSON.stringify())
myCopy = JSON.parse(JSON.stringify(MyObject));
recursiveDeepCopy
myCopy = recursiveDeepCopy(MyObject);
structuredClone
myCopy = structuredClone(MyObject);
rfdc
myCopy = rfdcClone(MyObject);