After a few years since it's creation, fast-clone is no longer the fastest cloning library on npm. Alternative packages have caught up and overtaken it. I had a last stab at optimising it while adding new features but alas optimising for performance further meant sacrificing features (and vice-versa). So I've decided to hand over the fast-clone
npm namespace to a more worthy contender. rfdc (really fast deep clone) is exactly what it's initialism means: really fast.
The fastest deep cloning function on NPM that supports the following types:
- Objects (POJOs, null, undefined)
- Arrays
- Dates
- Regular Expressions
- Strings
- Numbers (NaN, Positive Infinity, Negative Infinity)
- Booleans
Average runtime of various NPM clone libraries on a large complex object loaded from json files of varying sizes ranging from 3.5 MB to 15 MB.
Library | 7.15 MB |
---|---|
✔ fast-clone | 120 ms |
✘ deepClone | 138 ms |
✘ lodash.cloneDeep | 155 ms |
✘ snapshot | 1,127 ms |
✘ angular.copy | 1,942 ms |
✘ clone | 2,085 ms |
npm install fast-clone --save
yarn add fast-clone
Fast-clone is a UMD module so you can use it in Node.js, or in Browser either using Browserfy/Webpack, or by using the global clone function if not using a module loader.
import clone = require('fast-clone');
const clone = require('fast-clone');
const a = {
name: 'Natasha Rominov',
age: 30,
skills: [
'Pistols',
'Espionage'
],
dateOfBirth: new Date('1986-05-21T00:00:00.000Z')
};
const b = clone(a);
b.skills.push('That grabby thing she does with her legs');
console.log(a.skills)
console.log(b.skills);
Output will be:
['Pistols', 'Espionage']
['Pistols', 'Espionage', 'That grabby thing she does with her legs']
Got an issue or a feature request? Log it.
Pull-requests are also welcome. 😸