4

我正在遍历一个大数组(10^5 项)并对每个数组执行操作。

for (var row in rows) {
  switch (operator) {
    case "op1":
      row += 1;
      break;
    case "op2":
      ...
    case "opN":
      break;
  }
}

为了可测试性和可读性,我想将内部 switch 语句提取到它自己的函数中,所以循环看起来像

for (var row in rows) {
  this.updateRow(row, operator);
}

与调用函数 10^5 次相关的开销是否会导致明显的性能损失?

4

2 回答 2

2

内联函数总是比定义函数快一点。这是因为参数和返回之类的东西不需要在运行时从堆栈中推送和弹出。通常这对于较新的机器来说不是什么大问题,但是通过 10^5 次函数调用,您可能会看到一些性能下降。

我可能会保持它内联。并没有太大的伤害,每一点优化都有帮助!

于 2012-07-06T18:05:39.187 回答
1

是的

使用 JSPerf 我在这里介绍了我的示例:http: //jsperf.com/inline-switch-vs-switch-function

我用 4 个简单的算术运算符测试了内联 switch 语句,对照在一个包含 100k 项的数组上提取到它自己的函数的相同 switch 语句。我还使用随机开关运算符、最佳情况运算符(第一个开关选项)和最坏情况运算符(最后一个开关选项)对其进行了测试。

内联 switch 语句全面优于该函数,在最坏的情况下以约 150 ops/sec 的速度击败该函数,在最佳情况下以约 600 ops/sec 的速度击败该函数。

在这种情况下,内联 switch 语句会明显更快。

于 2012-07-06T18:55:36.603 回答