JS Deep Copy

JavaScript performance comparison

Revision 2 of this test case created by Vincent

Preparation code

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
      
<script>
Benchmark.prototype.setup = function() {
  function recursiveDeepCopy(o) {
    var newO,
      i;
  
    if (typeof o !== 'object') {
      return o;
    }
    if (!o) {
      return o;
    }
  
    if ('[object Array]' === Object.prototype.toString.apply(o)) {
      newO = [];
      for (i = 0; i < o.length; i += 1) {
        newO[i] = recursiveDeepCopy(o[i]);
      }
      return newO;
    }
  
    newO = {};
    for (i in o) {
      if (o.hasOwnProperty(i)) {
        newO[i] = recursiveDeepCopy(o[i]);
      }
    }
    return newO;
  }
  
  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
          }
        }
      }
    }]
  }]

};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
Recursive Deep Copy
var dimensionsCopy = recursiveDeepCopy(dimensions);
pending…
JSON Deep Copy
var dimensionsCopy = jsonDeepCopy(dimensions);
pending…
lodash clone
var dimensionsCopy = _.cloneDeep(dimensions);
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL.

0 Comments