Javascript:切换案例结构是检查大量正则表达式的最快方法吗?

时间:2016-08-10 08:40:52

标签: javascript switch-statement

为了解决(正则表达式)检测多个条目的问题,从可读性和效率(速度,内存使用)的角度来看,切换/案例方法似乎比if / else方法更好。但是,当检查的病例数增加时,情况仍然如此吗?

在速度和内存使用方面,超过20个案例(以及超过10个中断)的开关/案例句子仍然是最有效的解决方法吗?

示例代码:

    for (var i in pieces) { // each pieces[i] is an unknown text
        switch (true) {
            case /^\"?Accession\"?/.test(pieces[i]):
            case /^\"?Protein IDs\"?/.test(pieces[i]):
                numeration[0] = i; // an array to store the "column" location
                break;
            case /^\"?Description\"?/.test(pieces[i]):
            case /^\"?Protein names\"?/.test(pieces[i]):
                numeration[1] = i;
                break;
            //etcetcetc...
        }
     }

1 个答案:

答案 0 :(得分:1)

首先是

首先,如果你尽可能地将案例组合在一起会更好。

case /^\"?(Protein IDs|Accession)\"?/.test(pieces[i]):

这两者都增加了性能并减少了内存使用量。

Switch vs If / else

  

switch语句经常被其他编程语言引用为   用于评估多种条件的更好的选择。这个   不是因为switch语句的性质,而是因为   因为编译器如何能够优化switch语句   更快的评估。由于大多数JavaScript引擎都没有这样的   优化,switch语句的性能好坏参半。

     

Firefox可以很好地处理switch语句,每个条件都是如此   无论如何,评估在大致相同的时间内执行   它们的定义顺序。这意味着有价值的情况   等于0将花费大致相同的执行时间   当值为9.但是,其他浏览器并不是那么好。   Internet Explorer,Opera,Safari和Chrome都显示出来   当您深入到交换机时,执行时间会增加   声明。然而,这些增长小于增长   经历了if语句的每个附加条件。您可以   因此通过订购来改善switch语句的性能   降低频率的条件(与if语句相同)   优化)。

所以我写了一个if语句然后!但等等。

优化If语句

而不是写作:

if (value == 0){
    return result0;
} else if (value == 1){
    return result1;
} else if (value == 2){
    return result2;
} else if (value == 3){
    return result3;
} else if (value == 4){
    return result4;
} else if (value == 5){
    return result5;
} else if (value == 6){
    return result6;
} else if (value == 7){
    return result7;
} else if (value == 8){
    return result8;
} else if (value == 9){
    return result9;
} else {
    return result10;
}

你可以写这样的东西,所以最糟糕的情况并不像评估9条件那样糟糕:

if (value < 6){

if (value < 3){
    if (value == 0){
        return result0;
    } else if (value == 1){
        return result1;
    } else {
        return result2;
    }
} else {
    if (value == 3){
        return result3;
    } else if (value == 4){
        return result4;
    } else {
        return result5;
    }
}

} else {

if (value < 8){
    if (value == 6){
        return result6;
    } else {
        return result7;
    }
} else {
    if (value == 8){
        return result8;
    } else if (value == 9){
        return result9;
    } else {
        return result10;
    }

}

来源:http://archive.oreilly.com/pub/a/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html