IMT*_*Man 12 javascript performance
在我看来,在某些情况下,如果某个值等于某个值,有两种方法可以做某事:开关或对象查找。
使用开关:
var value = ["Hello", "hi", "bYe", "die"][Math.floor(Math.random() * (4))];
switch (value.toLowerCase()) {
case "hello":
alert(value + "\n\n" + "hi");
break;
case "hi":
alert(value + "\n\n" + "hello");
break;
case "bye":
alert(value + "\n\n" + "no");
break;
case "die":
alert(value + "\n\n" + "you shot me");
break;
}Run Code Online (Sandbox Code Playgroud)
使用对象查找:
var value = ["Hello", "hi", "bYe", "die"][Math.floor(Math.random() * (4))];
var LOOKUP = {
"hello": function(v) {
alert(v + "\n\n" + "hi");
},
"hi": function(v) {
alert(v + "\n\n" + "hello");
},
"bye": function(v) {
alert(v + "\n\n" + "no");
},
"die": function(v) {
alert(v + "\n\n" + "you shot me");
},
};
LOOKUP[value.toLowerCase()](value);Run Code Online (Sandbox Code Playgroud)
我想知道哪个会有更好的性能?
两种方法都会有任何不明显的问题/陷阱吗?
小智 13
原始答案:查找表要快得多。
2020 年更新答案:这两种方法在现代浏览器中的性能几乎相同,switch 语句比查找表快 20-30%。
不久前我也有同样的问题。如果 jsperf 能够复活,这就是链接。 https://jsperf.com/if-switch-lookup-table/10
编辑:工作基准https://jsben.ch/JYZLQ
| 归档时间: |
|
| 查看次数: |
6548 次 |
| 最近记录: |