为了解决(正则表达式)检测多个条目的问题,从可读性和功效(速度、内存使用)的角度来看,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...
}
}
首先,尽可能将案例组合在一起会更好。
case /^\"?(Protein IDs|Accession)\"?/.test(pieces[i]):
这既提高了性能又减少了内存使用。
switch 语句在其他编程语言中经常被引用为 评估多种条件的更好选择。这 不是因为 switch 语句的性质,而是因为 因为编译器能够优化 switch 语句 更快的评估。由于大多数 JavaScript 引擎没有这样的 优化,switch 语句的性能参差不齐。
Firefox 可以很好地处理 switch 语句,每个条件的 无论什么情况,评估都会在大致相同的时间内执行 它们的定义顺序。这意味着值的情况 等于 0 将花费与执行大致相同的时间 当值为 9 时。然而,其他浏览器的表现却没有那么好。 Internet Explorer、Opera、Safari 和 Chrome 均显示引人注目 随着您深入切换,执行时间会增加 陈述。然而,这些增幅小于 对 if 语句的每个附加条件都有丰富的经验。你可以 因此,通过排序可以提高 switch 语句的性能 频率递减的条件(与 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;
}
}