javascript – JS:为什么这么慢?它不应该测试其他条件,但它是吗?

前端之家收集整理的这篇文章主要介绍了javascript – JS:为什么这么慢?它不应该测试其他条件,但它是吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚测试了一些东西.我一直认为在OR条件下,一旦计算机/浏览器找到一个真实的东西,它返回它,不测试其他条件.我围绕这个假设构建了我的代码.

但是,我计时了,看来长测试需要x4次,有什么解释呢?

注意:在Google Chrome控制台中测试.

JSPerf:

http://jsperf.com/or-condition返回true || 1

http://jsperf.com/or-condition2 var condition = true || 1;退货条件;

http://jsperf.com/or-condition3 if(true || 1)return true看起来比较快.

编辑:我刚才发现,真正的条件数量是不重要的.重要的是条件的长度.检查http://jsperf.com/or-condition5.

我的理论是浏览器由于其长度而将功能分成2个不同的内存区域.当它调用函数时,需要从多个内存区域而不是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

解决方法

当条件变得越来越复杂时,需要更长的时间来分析代码行.

我相信this JSPerf test可以很好地解释.

猜你在找的JavaScript相关文章