cloning an object with fixed shapes

JavaScript performance comparison

Revision 148 of this test case created by

Preparation code

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

      
<script>
Benchmark.prototype.setup = function() {
  var shapeObject = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: function() {
      return 6;
    },
    g: [7, 8, 9]
  };
  
  var clonedObject = {
    a: 11,
    b: 22,
    c: 33,
    d: 44,
    e: 55,
    f: function() {
      return 66;
    },
    g: [77, 88, 99]
  };
  
  function fixedShapeCloneContructor(objshape) {
      var keys = [];
      var count = 0;
      
      for (let i in objshape) {
          if (objshape.hasOwnProperty(i)) {
              keys[count] = i;
              count++;
          };
      }
  
      return (obj) => {
        return keys.reduce((acc, name) => {
          acc[name] = obj[name];
          return acc;
        }, {})
      }
  }
  
  
  let tailoredCloner = fixedShapeCloneContructor(shapeObject);
  
  
  
  function clone(obj) {
    var target = {};
    for (var i in obj) {
      if (obj.hasOwnProperty(i)) {
        target[i] = obj[i];
      }
    }
    return target;
  }
  
  Object.defineProperties(Object, {
    'extend': {
      'configurable': true,
      'enumerable': false,
      'value': function extend(what, wit) {
        var extObj, witKeys = Object.keys(wit);
  
        extObj = Object.keys(what).length ? Object.clone(what) : {};
  
        witKeys.forEach(function(key) {
          Object.defineProperty(extObj, key, Object.getOwnPropertyDescriptor(wit, key));
        });
  
        return extObj;
      },
      'writable': true
    },
    'clone': {
      'configurable': true,
      'enumerable': false,
      'value': function clone(obj) {
        return Object.extend({}, obj);
      },
      'writable': true
    }
  });

};
</script>

Preparation code output

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
use of shape constructor
var newObject = tailoredCloner(clonedObject);
pending…

Revisions

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

0 Comments