Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ECMAscript中的开关大小写性能_Javascript_Switch Statement_V8_Ecmascript 5_Spidermonkey - Fatal编程技术网

Javascript ECMAscript中的开关大小写性能

Javascript ECMAscript中的开关大小写性能,javascript,switch-statement,v8,ecmascript-5,spidermonkey,Javascript,Switch Statement,V8,Ecmascript 5,Spidermonkey,我在ECMAscript中使用常规的switch case语句。除了我个人对它的认可之外,还有大量的专家文献,关于这门语言的一般表现,特别是关于条件陈述 例如,我记得的一个好例子是Nicholas Zakas的优秀著作《高性能Javascript》。与许多其他书籍和文章一样,当您使用两个以上的条件语句时,switch case语句总是比if(else)语句更快 在我所知道的任何类似C的语言中,switch case语句只不过是一个二进制哈希映射,再次分解,它是汇编中的一个jmp代码链。好好读一读

我在ECMAscript中使用常规的
switch case
语句。除了我个人对它的认可之外,还有大量的专家文献,关于这门语言的一般表现,特别是关于条件陈述

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

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

然而,在这一前言之后:

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

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

有没有可能我忽略了什么?首先,我想,也许这还不够
case
语句,解释器只会在引擎盖下创建
if-else
条件,所以我增加了数量,结果没有任何变化


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

我引用了以下来源:

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

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

  • 有大量的值可以很容易地划分为多个范围

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

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

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

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

  • 要测试的值超过10个

  • 条件的结果是单个值,而不是要采取的多个操作


感谢您的回答,但它根本无法回答问题。你应该重新阅读这个问题,或许可以提供一个深入的答案:)