如何在javascript中找到更好的函数实现

时间:2012-07-24 03:40:41

标签: javascript

我编写了三个javascript函数,它们完成相同的任务。它们都提供相同的结果,但我想知道哪一个更快,更具可扩展性?

这是我的功能 第一个

function odds(n, p) {
    var acc = 1;
    for (var i = 0; i < n; i++) {
        acc *= (n - i) / (p - i);
    }
    return acc;
}

第二个

function odds(n, p) {
    if (n == 0) {
        return 1;
    } else {
        return (n / p) * odds(n - 1, p - 1);
    }
}

第三个

var odds = (function () {
    var odds1 = function(n, p, acc) {
        if(n == 0) {
            return acc;
        } else {
            return odds1(n - 1, p - 1, (n / p) * acc);
        }
    }
    return function(n, p) {
        return odds1(n, p, 1);
    }  
}());

3 个答案:

答案 0 :(得分:3)

您可以使用http://jsperf.com/来测试javascript性能,以便了解哪个功能更快

答案 1 :(得分:3)

你必须进行测试以回答这样的问题,但通常情况下,内部循环几乎总是比javascript中的递归更快。像jsPerf这样的测试工具对于为您提供真实数据非常非常有用。

我在这里为你的三个案例建立了一个jsPerf:http://jsperf.com/oddsflavors。对于我选择的参数(我不确定哪个参数对你来说最重要),它显示你的第一个代码选项(没有递归的那个)大约是第二个代码选项的两倍。

答案 2 :(得分:0)

您可以使用各种工具来测试Javascript代码的速度,例如JSLitmusjsPerf

另外,请查看此问题:How do you performance test JavaScript code?
this article进行Javascript性能测试。