ECMAscript中的switch-case性能

jAn*_*ndy 7 javascript v8 spidermonkey switch-statement ecmascript-5

switch-case在ECMAscript中定期使用语句.除了我个人对它的认可之外,还有大量的专业文献,关于这种语言的表现以及有条件的陈述.

我记得的一个很好的例子是尼古拉斯扎卡斯的优秀书籍" 高性能Javascript ".像许多其他书籍和文章一样,当你使用两个以上的条件案例时,switch-case声明总是比if (else)语句更快.

在我所知道的任何类C语言中,switch-case语句只不过是二进制哈希映射,它再次被分解为汇编中的一串jmp代码.在这里读一读

但是,在这个前言之后:

我与我的团队讨论了事件处理函数的用法以及我们如何处理事件类型.我们是否要对任何事件使用显式函数,或者我们是否应该使用一个处理多个事件类型的函数.在该讨论中,开发了性能问题,我们创建了一个非常基本的,简单的jsPerf:

http://jsperf.com/engine-context-data-caching-test/3

我对结果和我看到的内容感到非常震惊.在这些测试案例相信,该命令case statements是执行的性能大幅重要.之间的差异long,并longSlow在那里,不仅是位置的的case 'baz'的内声明switch的语句.这是真实合理的吗?

我有没有机会忽略某些事情?首先,我想好了,也许它的case说法不够而且解释器只会创建if-else条件,所以我增加了数字而没有任何结果变化.

我只是拒绝相信像V8spidermonkey这样的ECMAscript引擎仍然没有优化这个问题.

小智 5

我引用的是这个来源:http : //oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficiency-javascript.html#sect2

在以下情况下使用if语句:

  • 要测试的离散值不超过两个。

  • 有大量的值可以轻松地分成多个范围。

在以下情况下使用switch语句:

  • 有两个以上但少于10个要测试的离散值。

  • 条件值没有范围,因为值是非线性的。

在以下情况下使用数组查找:

  • 有超过10个要测试的值。

  • 条件的结果是单个值,而不是要执行的许多操作。

  • 感谢您的回答,但根本无法回答问题。您应该重新阅读问题,并可能提供深入的答案:) (3认同)