【问题标题】:JavaScript Performance switch (Integer) vs switch (String)JavaScript 性能开关(整数)与开关(字符串)
【发布时间】:2016-01-02 22:09:07
【问题描述】:

我来自 C#,两者之间存在巨大差异
答:

var stringVal = "1";
switch (stringVal)
{
    case "0" :
    break;
    case "1" :
    break;
}


乙:

var intVal = 1;
switch (intVal)
{
    case 0 :
    break;
    case 1 :
    break;
}

B 在 C# 中要快得多(因为 String-Switch 将从编译器转换为 if-else-structure)。

在 JavaScript 中是否类似? (当然 JS 中只有数字类型)

并且-为了可读性-如果我想在 JS 中使用一些枚举-“等效”(如此处所述http://stijndewitt.com/2014/01/26/enums-in-javascript/),使用时是否有性能改进

var caseEnum = {
    firstCase : 0,
    secCase : 1
}

var enumVal = caseEnum.secCase ;
switch (enumVal )
{
    case caseEnum.firstCase :
    break;
    case caseEnum.secCase :
    break;
}

?

(我知道我可以使用对象字面量来做到这一点,但是整数的 switch 语句对我来说更自然)

【问题讨论】:

  • "在 JavaScript 中是否类似?"取决于解释器的实现。
  • 使用整数可能更快,但 JIT 是一个神秘的东西。如有疑问,请提供个人资料。

标签: javascript performance enums integer switch-statement


【解决方案1】:

我自己做了一个令人难以置信的丑陋测试
(look at:https://jsfiddle.net/PutziSan/kzdwt8u2)

并在不同的浏览器上运行代码(结果如下),(所有浏览器都更新到今天的最新版本 - 03.01.2016)

顺便说一句,edge 和 IE 实在是太可笑了。
我猜结果真的很有趣。
(我知道这种“测试”不太准确,但我认为它们可以给出提示)

似乎编译器注意到了使用 Integer 进行的切换,但影响并不大。

铬:

火狐:

边缘:

IE:

【讨论】:

  • 非常有用且有趣的时间比较,谢谢!
【解决方案2】:

在 JavaScript 中是否类似? (当然JS里只有数字类型)

在 javascript 中,表达式几乎可以是任何东西,不像 C 在编译期间验证类型,这里它是在“运行时”期间计算的

这是主要区别。

很详细的解释在MDN - Switch

... 表达式的计算结果与输入表达式的结果相同
使用严格比较,===


...是否有任何性能改进

这取决于您的浏览器及其 JS 引擎。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-17
  • 2019-07-02
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多