gpt4 book ai didi

javascript - ECMAscript 中的 switch-case 性能

转载 作者:数据小太阳 更新时间:2023-10-29 04:46:25 25 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












编辑问题以包含 desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem .这将帮助其他人回答问题。


8年前关闭。







Improve this question




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

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

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

然而,在这个前言之后:

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

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

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

我有没有可能忽略一些东西?首先,我想得很好,可能还不够case语句和解释器只会创建 if-else引擎盖下的条件,所以我增加了数量,结果没有任何变化。

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

最佳答案

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

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

  • 要测试的离散值不超过两个。
  • 有大量的值可以很容易地分成范围。

  • 在以下情况下使用 switch 语句:
  • 要测试的离散值多于两个但少于 10 个。
  • 条件没有范围,因为这些值是非线性的。

  • 在以下情况下使用数组查找:
  • 要测试的值超过 10 个。
  • 条件的结果是单个值,而不是要采取的许多操作。
  • 关于javascript - ECMAscript 中的 switch-case 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215696/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com