7

switch-case在 ECMAscript 中使用常规基础上的语句。除了我个人对此的认可之外,还有大量的专业文献,关于这种语言的一般性能,特别是关于条件语句。

例如,我记得的一个很好的例子是 Nicholas Zakas 的优秀书籍“高性能 Javascript ”。就像在许多其他书籍和文章中一样,当您使用两个以上的条件案例时,据说switch-case语句总是比语句快。if (else)

在我所知道的任何类 Cswitch-case语言中,语句只不过是一个二进制哈希映射,它再次分解,是汇编中的jmp 代码链。在这里好好阅读

然而,在这个前言之后:

我与我的团队讨论了事件处理函数的使用以及我们将如何处理事件类型。无论我们是否要为任何事件使用显式函数,或者我们是否应该使用一个处理多种事件类型的函数。在那次讨论中,性能问题出现了,我们创建了一个非常基本、简单的jsPerf

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

我对结果和我所看到的感到非常震惊。相信这些测试用例,顺序case statements执行性能非常重要。long和那里的区别longSlow,只是语句在语句中的位置。这是真实的和合理的吗?case 'baz'switch

我有没有可能忽略一些东西?首先,我想得很好,也许它的语句不够多case,解释器只会在幕后创造if-else条件,所以我增加了数量,结果没有任何变化。

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

4

1 回答 1

6

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

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

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

  • 有大量的值可以很容易地分成范围。

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

  • 要测试的离散值多于两个但少于 10 个。

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

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

  • 要测试的值超过 10 个。

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

于 2013-04-25T13:43:41.193 回答