angular.extend vs underscore.extend (v6)

Revision 6 of this benchmark created on


Preparation HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.5/angular.min.js">
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js">
</script>

Setup

var a = {
      a: 1,
      b: 2,
      c: 3
    };
      
    var b = {
      d: 4,
      e: 5,
      f: 6
    };
    
    function cloneMerge(/* object arguments */) {
        var params = {}, i, numArgs, j, numKeys, obj, keys, key;
    
        for (i = 0, numArgs = arguments.length; i < numArgs; i++) {
            obj = arguments[i];
            keys = Object.keys(obj);
    
            for (j = 0, numKeys = keys.length; j < numKeys; j++) {
                key = keys[j];
                params[key] = obj[key];
            }
        }
    
        return params;
    };
    
    function cloneMerge2(/* object arguments */) {
        var params = {}, i, numArgs, obj;
    
        for (i = 0, numArgs = arguments.length; i < numArgs; i++) {
            obj = arguments[i];
            
            Object.keys(obj).forEach(function (key) {
                params[key] = obj[key];
            });
        }
    
        return params;
    };
    
    function cloneMerge3(/* object arguments */) {
        var params = {};
    
        for (i = 0, numArgs = arguments.length; i < numArgs; i++) {
            var obj = arguments[i];
            var keys = Object.keys(obj);
    
            for (j = 0, numKeys = keys.length; j < numKeys; j++) {
                var key = keys[j];
                params[key] = obj[key];
            }
        }
    
        return params;
    };

Test runner

Ready to run.

Testing in
TestOps/sec
angular.extend()
angular.extend(a, b);
ready
underscore.extend()
_.extend(a, b);
ready
raw loops
cloneMerge(a, b);
ready
raw loops 2
cloneMerge2(a, b);
ready
raw loops 3
cloneMerge3(a, b);
ready

Revisions

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