Javascript 多开关情况语句

Javascript 多开关情况语句,javascript,performance,switch-statement,case,Javascript,Performance,Switch Statement,Case,所以,我有很多情况下的Switch语句,例如 switch(var){ case 1: myfunc(); break; ... case 40: myanotherfunc(); break; } 开关(var){ 案例1: myfunc(); 打破 ... 案例40: myanotherfunc(); 打破 } 在多个子开关中分离这些情况是提高性能的好方法吗?例如 switch(var){ case 1:

所以,我有很多情况下的Switch语句,例如

switch(var){ case 1: myfunc(); break; ... case 40: myanotherfunc(); break; } 开关(var){ 案例1: myfunc(); 打破 ... 案例40: myanotherfunc(); 打破 } 在多个子开关中分离这些情况是提高性能的好方法吗?例如

switch(var){ case 1: switch(var2){ case 1: myfunc(); break; case 2: myfuncfoo(); break; }; break; ... case 5: switch(var2){ case 1: myfunct(); break; case 2: myfuncfoobar(); break; }; break; 开关(var){ 案例1: 开关(var2){ 案例1: myfunc(); 打破 案例2: myfuncfoo(); 打破 }; 打破 ... 案例5: 开关(var2){ 案例1: myfunct(); 打破 案例2: myfuncfoobar(); 打破 }; 打破
我猜在这种情况下,js不会检查所有的情况,它会先检查几个情况,然后再检查几个情况,等等。

我不知道性能——这是一个从JavaScript引擎到JavaScript引擎的特性,但可读性方面,它是可怕的

由于JavaScript在对象中具有如此出色的键/值支持,并且对象访问优化得非常快,我发现自己再也不用switch语句了

var myDoGizmo = {
  "1": {
     "1": func1_1,
     "2": func1_2
   },
  "2": {
     "1": func2_1,
     "2": func2_2
   }
};

// Maybe a guard here if there can possibly be an out-of-range value.    
myDoGizmo[1][1]();

出于好奇,我决定做一个非常快速的测试。 如果情况是随机的,在性能方面似乎没有什么差别(奇怪的是,在IE上,双开关的性能似乎比chrome差。)Smallswitch确实有额外的数学功能。地板和除法当然

随着开关变得越来越大,可能会出现明显的差异,但我想说的是,平均而言,这仍将取决于运气(哪些案例被击中,较早的案例还是较晚的案例)哪个更快

function bigSwitch(value){
    switch(value){
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        case 9:
            break;
        case 10:
            break;
        case 11:
            break;
        case 12:
            break;
        case 13:
            break;
        case 14:
            break;
        case 15:
            break;
        case 16:
            break;
        case 17:
            break;
        case 18:
            break;
        case 19:
            break;
        case 20:
            break;    
    }
}

function smallSwitch(value){    
    switch(Math.floor(value/5)+1){
        case 1:
            switch(value%5){
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
            }
            break;
        case 2:
            switch(value%5){
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
            }
            break;
        case 3:
            switch(value%5){
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
            }
            break;
        case 4:
            switch(value%5){
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
            }
            break;
    }
}

var runsToDo = 10000000;
var timer = Date.now();
for(var i=0; i<runsToDo; i++){
    var value = Math.floor(Math.random()*20) + 1; 
    bigSwitch(value);     
}
console.log("BigSwitch time = ", Date.now() - timer); 

timer = Date.now();
for(var i=0; i<runsToDo; i++){
    var value = Math.floor(Math.random()*20) + 1; 
    smallSwitch(value); 
}
console.log("smallSwitch time = ", Date.now() - timer);
功能大开关(值){
开关(值){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:
打破
案例5:
打破
案例6:
打破
案例7:
打破
案例8:
打破
案例9:
打破
案例10:
打破
案例11:
打破
案例12:
打破
案例13:
打破
案例14:
打破
案例15:
打破
案例16:
打破
案例17:
打破
案例18:
打破
案例19:
打破
案例20:
打破
}
}
函数smallSwitch(值){
开关(数学楼层(值/5)+1){
案例1:
开关(值%5){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:
打破
案例5:
打破
}
打破
案例2:
开关(值%5){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:
打破
案例5:
打破
}
打破
案例3:
开关(值%5){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:
打破
案例5:
打破
}
打破
案例4:
开关(值%5){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:
打破
案例5:
打破
}
打破
}
}
var runsToDo=10000000;
var timer=Date.now();

对于(var i=0;iIt)来说,不可能以这种方式编写代码