执行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
它考虑到不同的引擎和浏览器。