JS:为什么这会更慢? 它不应该测试其他或条件,但它呢?
我只是测试一些东西。 我一直认为,在一个OR条件下,一旦计算机/浏览器发现一些真实的东西,它会返回它并且不会测试其他条件。 我围绕这个假设构建了我的代码。
但是,我计算了它,似乎长时间的测试需要x4次,对此有任何解释?
注意:在Google Chrome控制台中进行测试。
JSPerf:
http://jsperf.com/or-condition return true || 1
return true || 1
http://jsperf.com/or-condition2 var condition = true || 1; return condition;
var condition = true || 1; return condition;
http://jsperf.com/or-condition3 if(true || 1) return true
似乎相对更快。
编辑:我刚刚发现如何真正的条件量并不重要。 重要的是条件的长度。 检查http://jsperf.com/or-condition5。
我的理论是,由于浏览器的长度,浏览器将功能分成两个不同的内存区域。 当它调用该函数时,它需要从多个内存区而不是1中获取数据。
a = function(){
return true ||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1;
}
b = function(){
return true;
}
//#############################################
var start = Date.now();
for(var i = 0 ; i < 1000000 ; i++){
a();
} var end = Date.now();
console.log(end-start); //3075
var start = Date.now();
for(var i = 0 ; i < 1000000 ; i++){
b();
} var end = Date.now();
console.log(end-start); //776
当条件变得更长和更复杂时,需要更长的JS引擎来分析代码行。
我相信这个JSPerf测试可以很好地解释它。
真|| 1返回true,它仍然需要检查|| 1与下一个1(递归)。 所以我想这就是原因。
链接地址: http://www.djcxy.com/p/64163.html上一篇: JS: Why Is This Slower? It Shouldn't Test Other OR Conditions But It Does?