"skip if condition" 和 "directly return" 之间的性能差异是什么?
What's the performance difference between "skip if condition" and "directly return"?
以下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 ...
}
哪个执行时间更短?
我认为没有性能差异,但第二个函数的可读性更好,因为您不必缩进。您也可以在第二个函数的 if 语句中使用 !a
以获得更好的可读性。
第二个函数的解析时间和 运行 比第一个要少,无论是在页面加载上还是在函数执行时。
在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构建抽象语法树并(在较新的引擎上)将结果编译为机器代码。即使绝大部分 a
函数体从未 执行 ,它仍然必须被 解析 。解析 100 万行 Javascript 是一项不平凡的任务。
当每个函数被执行时,a
可能比b
花费更多的时间到运行,即使只是一点点-例如,如果 a
在这些行中定义了许多变量,则变量范围为 a
:
function a() {
var a = false;
if(a) {
var b = 'b';
var c = 'c';
// more lines
}
}
当函数为 运行 时,解释器必须遍历 if
块中定义的所有变量,这些变量从未 运行s,以便这些变量名称可以正确初始化。当函数为运行、var b;
和var c
时;和任何其他 var
s 将被提升到顶部:
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;
}
}
将被更快地解析、编译和运行。
以下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 ...
}
哪个执行时间更短?
我认为没有性能差异,但第二个函数的可读性更好,因为您不必缩进。您也可以在第二个函数的 if 语句中使用 !a
以获得更好的可读性。
第二个函数的解析时间和 运行 比第一个要少,无论是在页面加载上还是在函数执行时。
在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构建抽象语法树并(在较新的引擎上)将结果编译为机器代码。即使绝大部分 a
函数体从未 执行 ,它仍然必须被 解析 。解析 100 万行 Javascript 是一项不平凡的任务。
当每个函数被执行时,a
可能比b
花费更多的时间到运行,即使只是一点点-例如,如果 a
在这些行中定义了许多变量,则变量范围为 a
:
function a() {
var a = false;
if(a) {
var b = 'b';
var c = 'c';
// more lines
}
}
当函数为 运行 时,解释器必须遍历 if
块中定义的所有变量,这些变量从未 运行s,以便这些变量名称可以正确初始化。当函数为运行、var b;
和var c
时;和任何其他 var
s 将被提升到顶部:
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;
}
}
将被更快地解析、编译和运行。