建议28:使用查表法提高条件检测的性能
当有大量离散值需要测试时,使用if和switch都比使用查表法要慢得多。在JavaScript中查表法可通过数组或普通对象实现,查表法访问数据比if和switch更快,特别是当条件体的数目很大时。与if和switch相比,查表法不仅非常快,而且当需要测试的离散值数量非常大时,也有助于保持代码的可读性。
例如,在下面代码中,使用switch检测value值。
- switch(value) {
- case 0:
- return result0;
- case 1:
- return result1;
- case 2:
- return result2;
- case 3:
- return result3;
- case 4:
- return result4;
- case 5:
- return result5;
- case 6:
- return result6;
- case 7:
- return result7;
- case 8:
- return result8;
- case 9:
- return result9;
- default:
- return result10;
- }
使用switch结构检测value值的代码所占的空间可能与switch的重要性不成比例,代码很笨重。整个结构可以用一个数组查询替代: - var results = [result0, result1, result2, result3,
result4, result5, result6, result7, result8, result9, result10] - return results[value];
当使用查表法时,必须完全消除所有条件判断。操作转换成一个数组项查询或一个对象成员查询。使用查表法的一个主要优点:由于没有条件判断,当候选值数量增加时,基本上不会增加额外的性能开销。查表法常用于一个键和一个值形成逻辑映射的领域,而switch更适合于每个键需要一个独特的动作或一系列动作的场合。