JSFiddle - React, Tailwind, and code Playground

by cyber cyber

JavaScript

(function () { 
    
    var res = [];
    
    /**
    * @param {{
         countCall: number, 
         countIterat: number,
         functions: array,
         funcParams: array} 
        
    * @params functions for test
    * @returns {Array} со среднем временем выполнения функции, в переданном порядке
    */
    function runtime(params) {
        
    // countCall * countIterat = кол-во вызовов функии   
    var countCall = 10000,// кол-во вызовов функции
        countIterat = 100,// количество повторов вызовов
        fnc;

     
    var start = 0;
        
    if(typeof params == 'object'){
        
        start = 1;
    }
        
    fnc = [].slice.call(arguments, start);
    
     countCall =  params.countCall || countCall;
     countIterat = params.countIterat || countIterat;
        
        for(var i = 0; i < fnc.length; i++){
         
            for(var j = 0; j < countIterat; j++) {
             
                
               test(fnc[i], countCall, params.funcParams);  
            
            }
        
        }
    
      return  compare(res);
    }
 
    function test(fnc, count, params) {
       
      if(!res[fnc])    
        res[fnc] = []; 
        
        var d = new Date;
        
        for(var i = 0; i < count; i++)
           fnc.apply(this, params);
        
        res[fnc].push(new Date - d);
    
    };

    function compare(arr) {
        
        var keys = Object.keys(arr),
            results = [], j = 0;
        
        keys.forEach(function (key){
            
            results[j] = 0;
            
            arr[key].forEach(function (i) {
            
                results[j] += i;
                
            
            });
            
            
            results[j] = Math.round (results[j] / arr[key].length);
    
            j++;
            
        });
        
        return results;
    
    }
    
    window.Runtime = runtime;
    
}());