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

时间:2019-03-15 08:24:53

标签: javascript if-statement return execution-time

以下两个功能之间是否有任何性能差异:

countryname sumval
Franch        1
India         2

哪个执行时间更短?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构造一个抽象语法树,并(在较新的引擎上)将结果编译为机器代码。即使大多数a函数体从未执行过 ,仍必须对其进行解析。解析一百万行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;其他所有var都将悬挂在顶部:

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;
    }
 }

将被解析,编译并运行得更快。