我在ECMAscript中的常规基础上使用ECMAscript语句。除了我个人对它的赞同之外,还有大量的专业文献,关于这门语言的表现,以及关于条件陈述的具体内容。
例如,我记得的一个很好的例子是尼古拉斯·扎卡斯( Nicholas )的“高性能Javascript”()一书。与许多其他书籍和文章一样,当您使用两个以上的条件情况时,据说switch-case
语句总是比if (else)
语句更快。
在我所知道的任何类似C的语言中,switch-case
语句只不过是二进制哈希映射,它再次被分解,是程序集中的jmp代码链。好好阅读这里
然而,在本序言之后:
我与我的团队讨论了事件处理程序函数的使用,以及我们将如何处理事件类型。无论我们是否对任何事件使用显式函数,或者如果我们使用一个处理多个事件类型的大函数。在那次讨论中,出现了性能问题,我们创建了一个非常基本、简单的jsPerf:
http://jsperf.com/engine-context-data-caching-test/3
我对结果和我所看到的感到非常震惊。相信这些测试用例,case statements
的顺序对于执行的性能非常重要。long
和longSlow
之间的区别仅在于case 'baz'
语句在switch
语句中的位置。这是真实合理的吗?
我有没有可能忽略了什么?首先,我想得很好,可能case
语句不够,解释器只会在幕后创建if-else
条件,所以我增加了数量,结果没有任何变化。
我只是不相信ECMAscript引擎,如V8和蜘蛛猴,仍然没有优化这个问题。
发布于 2013-04-25 13:43:41
我引用的是这个来源:http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html#sect2
在下列情况下使用if语句:
在下列情况下使用开关语句:
使用数组查找时:
https://stackoverflow.com/questions/16215696
复制相似问题