由于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/MwVNNR和http://codepen.io/nicholasabrams/pen/bdvXPK并检查控制台。我做错了什么?
答案 0 :(得分:1)
有一个console.log调用会延迟doCalc方法中的执行。删除它,你会得到不同的结果