执行if-else,开关或基于地图的调节

我想知道在JavaScript中的条件结构的以下实现的性能。

方法1:

if(id==="camelCase"){ window.location.href = "http://www.thecamelcase.com"; }else if (id==="jsFiddle"){ window.location.href = "http://jsfiddle.net/"; }else if (id==="cricInfo"){ window.location.href = "http://cricinfo.com/"; }else if (id==="apple"){ window.location.href = "http://apple.com/"; }else if (id==="yahoo"){ window.location.href = "http://yahoo.com/"; } 

方法2:

 switch (id) { case 'camelCase': window.location.href = "http://www.thecamelcase.com"; break; case 'jsFiddle': window.location.href = "http://www.jsfiddle.net"; break; case 'cricInfo': window.location.href = "http://www.cricinfo.com"; break; case 'apple': window.location.href = "http://www.apple.com"; break; case 'yahoo': window.location.href = "http://www.yahoo.com"; break; } 

方法3

 var hrefMap = { camelCase : "http://www.thecamelcase.com", jsFiddle: "http://www.jsfiddle.net", cricInfo: "http://www.cricinfo.com", apple: "http://www.apple.com", yahoo: "http://www.yahoo.com" }; window.location.href = hrefMap[id]; 

方法4

 window.location.href = { camelCase : "http://www.thecamelcase.com", jsFiddle: "http://www.jsfiddle.net", cricInfo: "http://www.cricinfo.com", apple: "http://www.apple.com", yahoo: "http://www.yahoo.com" }[id]; 

方法3和4可能有几乎相同的performance,但只是张贴确认。

根据这个JSBen.chtesting, switch设置是所提供的方法(Firefox 8.0和Chromium 15)中最快的。

方法3和方法4稍微不快,但几乎不明显。 显然,if-elseif方法明显较慢(FireFox 8.0)。

铬15中的相同testing在这些方法之间没有performance出显着的性能差异。 事实上,if-elseif方法似乎是Chrome中最快的方法。

更新

我再次运行testing用例,并添加了10个条目。 hrefmap(方法3和4)显示更好的性能。

如果要在函数中实现比较方法,方法3肯定会胜出:将地图存储在variables中,稍后再引用此variables,而不是重新构build它。

你总是可以自己做一个jsPerftesting。 但是,通常查找表是访问数据的最快方式。 这将是(3)在你的片段。 而且, switch/case几乎总是比if-else更快。 所以你的例子的顺序是

(3)(4)(2)(1)

只是觉得我会加上这个作为一个可能的考虑。 我碰到这个做这个问题的研究… http://davidbcalhoun.com/2010/is-hash-faster-than-switch-in-javascript

它考虑到不同的引擎和浏览器。