首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ECMAscript中的开关箱性能

ECMAscript中的开关箱性能
EN

Stack Overflow用户
提问于 2013-04-25 13:11:32
回答 1查看 1.5K关注 0票数 7

我在ECMAscript中的常规基础上使用ECMAscript语句。除了我个人对它的赞同之外,还有大量的专业文献,关于这门语言的表现,以及关于条件陈述的具体内容。

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

在我所知道的任何类似C的语言中,switch-case语句只不过是二进制哈希映射,它再次被分解,是程序集中的jmp代码链。好好阅读这里

然而,在本序言之后:

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

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

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

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

我只是不相信ECMAscript引擎,如V8和蜘蛛猴,仍然没有优化这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 13:43:41

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

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

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

在下列情况下使用开关语句:

  • 要测试的离散值有两个以上,但少于10个。
  • 由于这些值是非线性的,因此不存在条件范围。

使用数组查找时:

  • 要测试的值超过10个。
  • 这些条件的结果是单一的值,而不是要采取的若干行动。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16215696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档