ECMAscript中的案例性能

我在ECMAscript中定期使用switch-case语句。 除了我个人对此的认可之外,还有大量的专业文献,关于一般这种语言的表现和关于条件表述的具体内容。

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

在我所知的任何类C语言中, switch-case语句不过是一个二进制哈希映射,它再次分解为汇编中的一系列jmp代码。 在这里有一个很好的阅读

但是,在这个前言之后:

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

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

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

有没有机会忽略某些东西? 首先,我的想法很好,也许它没有足够的case陈述,而解释者只会在引擎盖下创建if-else条件,所以我增加了数量而没有改变结果。

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


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

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

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

  • 有很多值可以很容易地分成范围。

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

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

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

  • 使用数组查找时:

  • 有超过10个值要测试。

  • 条件的结果是单一的值,而不是一些要采取的行动。

  • 链接地址: http://www.djcxy.com/p/71197.html

    上一篇: case performance in ECMAscript

    下一篇: Custom profile for Chrome