“跳过条件”和“直接返回”之间的性能差异是什么?

问题描述 投票:-1回答:2

以下两个功能之间是否存在性能差异:

function a() {
    var a = false;
    if(a == true) {
           ... Many lines, e.g. 1 million lines ...
    }
}

function b() {
    var a = false;
    if (a != true) {
        return;
    }
           ... Many lines, e.g. 1 million lines ...
 }

哪一个执行时间较短?

javascript if-statement return execution-time
2个回答
1
投票

我认为没有性能差异,但第二个功能更易于阅读,因为您不必缩进。您还可以在第二个函数的if语句中使用!a以获得更好的可读性。


0
投票

在页面加载和执行函数时,第二个函数应该比第一个函数花费更少的时间来解析和运行。

在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构造抽象语法树和(在较新的引擎上)将结果编译为机器代码。即使大多数a函数体从未被执行过,它仍然需要被解析。解析100万行Javascript是一项非常重要的任务。

当执行每个函数时,a可能比b运行更多时间,即使只是一点点 - 例如,如果a在这些行中定义了许多变量,那么变量作用于a

function a() {
    var a = false;
    if(a) {
      var b = 'b';
      var c = 'c';
      // more lines
    }
}

运行该函数时,解释器必须查看从未运行的if块中定义的所有变量,以便可以正确初始化这些变量名称。当函数运行时,var b;var c;任何其他vars将被提升到顶部:

function a() {
  var a;
  var b;
  var c;
  // initialize any other variables local to this function
  a = false;
  if(a) {
    b = 'b';
    c = 'c';
    // more lines
  }
}

如果要初始化有许多变量,这可能会导致函数比没有变量初始化时花费更长的时间。

相比之下,一个函数没有多余的变量来初始化,也没有多行要解析:

function b() {
    var a = false;
    if (a != true) {
        return;
    }
 }

将被更快地解析,编译和运行。

© www.soinside.com 2019 - 2024. All rights reserved.