Function runtime

Measures the time of execution of the function.

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;

}());