switch-case 结构是检查大量正则表达式的最快方法吗? [已关闭]

问题描述 投票:0回答:1

为了解决(正则表达式)检测多个条目的问题,从可读性和功效(速度、内存使用)的角度来看,switch/case 方法似乎比 if/else 方法更好。但当检查的案件数量增加时,情况还是这样吗?

就速度和内存使用而言,超过 20 个案例(以及超过 10 个中断)的 switch/case 句子仍然是解决该问题的最有效方法吗?

示例代码:

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...
    }
 }
javascript switch-statement
1个回答
1
投票

要事第一

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

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

这既提高了性能又减少了内存使用。

Switch 与 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

© www.soinside.com 2019 - 2024. All rights reserved.