Script Preparation code:
x
 
const sourceObjects = [];
const destObjects = [];
for (let i = 0; i < 500; ++i) {
    const sourceObject = {};
    for (let j = 0; j < 10; ++j) {
        sourceObject[Math.random().toFixed(0) * 1000] = Math.random().toFixed(0) * 1000;
    }
  
    const destObject = {};
    for (let j = 0; j < 5; ++j) {
        destObject[Math.random().toFixed(0) * 1000] = Math.random().toFixed(0) * 1000;
    }
  
    sourceObjects.push(sourceObject);
    destObjects.push(destObject);
}
window.sourceObjects = sourceObjects;
window.destObjects = destObjects;
Tests:
  • Object.assign

     
    const sourceObjects = window.sourceObjects;
    const destObjects = window.destObjects;
    for (let i = 0; i < sourceObjects.length; ++i) {
        const destObject = destObjects[i];
        const sourceObject = sourceObjects[i];
      
        const newObject = Object.assign(destObject, sourceObject);
    }
  • Polyfill Extend

     
    function objForEachKey(target, callbackfn) {
        if (target) {
            for (var prop in target) {
                if (Object.prototype.hasOwnProperty.call(target, prop)) {
                    callbackfn.call(target, prop, target[prop]);
                }
            }
        }
    }
    function extend(obj, obj2, obj3, obj4, obj5) {
        // Variables
        var extended = {};
        var deep = false;
        var i = 0;
        var length = arguments.length;
        var objProto = Object.prototype;
        var theArgs = arguments;
        // Check if a deep merge
        if (objProto.toString.call(theArgs[0]) === "[object Boolean]") {
            deep = theArgs[0];
            i++;
        }
        // Loop through each object and conduct a merge
        for (; i < length; i++) {
            var obj = theArgs[i];
            objForEachKey(obj, function (prop, value) {
                extended[prop] = value;
            });
        }
        return extended;
    }
    const sourceObjects = window.sourceObjects;
    const destObjects = window.destObjects;
    for (let i = 0; i < sourceObjects.length; ++i) {
        const destObject = destObjects[i];
        const sourceObject = sourceObjects[i];
      
        const newObject = extend(destObject, sourceObject);
    }
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Object.assign
    Polyfill Extend

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.76
Chrome 97 on Windows
View result in a separate tab
Test name Executions per second
Object.assign 1333.7 Ops/sec
Polyfill Extend 524.6 Ops/sec