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;
}());