【问题标题】:switch-case performance in ECMAscript [closed]ECMAscript 中的 switch-case 性能
【发布时间】:2013-04-25 13:11:32
【问题描述】:

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

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

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

但是,在这个前言之后:

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

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

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

有没有可能我忽略了什么?首先,我想得很好,可能是 case 语句不够,解释器只会在后台创建 if-else 条件,所以我增加了数量,结果没有任何变化。

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

【问题讨论】:

    标签: javascript switch-statement v8 ecmascript-5 spidermonkey


    【解决方案1】:

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

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

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

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

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

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

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

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

    • 要测试的值超过 10 个。

    • 条件的结果是单个值,而不是要采取的一系列操作。

    【讨论】:

    • 感谢您的回答,但它根本没有回答问题。你应该重新阅读这个问题,也许提供一个深入的答案:)
    猜你喜欢
    • 2012-09-13
    • 2018-08-23
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多