性能测试给出无效结果

时间:2015-07-08 17:34:26

标签: javascript performance oop

由于jsperf关闭,我有一个非常简单的perf测试设置,以评估使用构造函数与使用工厂样式函数相比多快。

不幸的是,我的结果表明使用OOP方法(构造函数版本)大约(至少)慢10倍。

以下是我的两项测试:

function stdFactorial(num)
{
    // If the number is less than 0, reject it.
    if (num < 0) {
        return -1;
    }
    // If the number is 0, its factorial is 1.
    else if (num == 0) {
        return 1;
    }
    var tmp = num;
    while (num-- > 2) {
        tmp *= num;
    }
    return tmp;
}

console.time("std factorial test");


for (var i = 1; i < 10000; i++) {
    stdFactorial(20);
}

console.timeEnd("std factorial test");

这次使用'this'关键字

除了相同的功能
function oopFactorial(){
    this.doCalc = function(num){
              // If the number is less than 0, reject it.
        if (num < 0) {
            return -1;
        }
        // If the number is 0, its factorial is 1.
        else if (num == 0) {
            return 1;
        }
        var tmp = num;
        while (num-- > 2) {
            tmp *= num;
        }
        console.log('...')
        return tmp;
    }
};




var instance = new oopFactorial();

console.time("oop factorial test");

(function(){
    for (var i = 1; i < 10000; i++) {
        instance.doCalc(20);
    }
})();

console.timeEnd("oop factorial test");

运行http://codepen.io/nicholasabrams/pen/MwVNNRhttp://codepen.io/nicholasabrams/pen/bdvXPK并检查控制台。我做错了什么?

1 个答案:

答案 0 :(得分:1)

有一个console.log调用会延迟doCalc方法中的执行。删除它,你会得到不同的结果