Javascript If语句性能

Javascript If语句性能,javascript,Javascript,给定以下代码段: if(条件1和条件2){ //行动1 }如果(!条件1){ //行动2 }否则{ //行动3 } 如果我以这种方式对其进行重组,是否会对性能产生影响: if(条件1){ 如果(条件2){ //行动1 }否则{ //行动3 } }否则{ //行动2 } 通常,第一个嵌套块比if..else嵌套块更清晰,通常是首选 此外,性能也不同,因为condition1&&condition会导致短路操作。因此,如果第一个条件为false,它将不会继续检查第二个条件。否,除非条件1包含某种类

给定以下代码段:

if(条件1和条件2){
//行动1
}如果(!条件1){
//行动2
}否则{
//行动3
}
如果我以这种方式对其进行重组,是否会对性能产生影响:

if(条件1){
如果(条件2){
//行动1
}否则{
//行动3
}
}否则{
//行动2
}

通常,第一个嵌套块比if..else嵌套块更清晰,通常是首选


此外,性能也不同,因为
condition1&&condition
会导致短路操作。因此,如果第一个条件为false,它将不会继续检查第二个条件。

否,除非
条件1
包含某种类型的重载方法调用,否则将重复该调用。如果是这样的话,最好先调用它,然后比较结果,让它更容易阅读

let condition1Result = condition1();
if (condition1Result && condition2) {
  // ACTION 1
} else if (!condition1Result) {
  // ACTION 2
} else {
  // ACTION 3
}

在几乎所有情况下,仅比较两个值对性能的影响可以忽略不计,因此关注微优化代码的可读性始终是一个好主意。

这取决于条件1和条件2是什么。我可以想象这样一个场景。例如,如果两个条件都是查询数据库的函数。 Condition1返回true,然后condition2返回false,但会更改数据库中的值,这将导致Condition1在下一次检查时返回false

这就是为什么在第一段代码中,condition1将两次转到DB,这会降低性能


如果这两个条件都只是变量,我认为应该不会有任何区别,我不会担心这样的语句是否会提高性能。他们非常相似。你能做的就是看看哪种情况最有可能发生,并把这种情况摆在别人面前

但您也可以计算每种情况下的检查操作数:

# in first example
Action 1 - 2 comparisons
Action 2 - 2-3 comparisons
Action 3 - 2-3 comparisons

# in second example
Action 1 - 2 comparisons
Action 2 - 1 comparisons
Action 3 - 2 comparisons

从第二个例子可以看出,需要检查的条件较少,应该稍微快一点。但是这是非常小的性能改进。

在第一种情况下,如果
condition1
false
,则会出现短路操作,这基本上意味着您不需要检查
condition2
,完全跳过该块

而在第二种情况下,如果
condition1
false
,则可以跳过两个块


就性能而言,不会有显著差异,因为它们只是比较。因此,您应该在特定的上下文中使用可读性和直观性更强的格式。

这取决于
条件1
。如果
condition1
为false,则给定的语句

if (condition1) {
  if (condition2) {
    // ACTION 1
  } else {
    // ACTION 3
  }
} else {
  // ACTION 2
}
快于

if (condition1 && condition2) {
  // ACTION 1
} else if (!condition1) {
  // ACTION 2
} else {
  // ACTION 3
}
由于未处理第二次比较,因此会立即输入
else
块。
但性能差异非常小

我认为仅从if语句来看,这并不是真正意义上的区别。但是,仅查找ifs,第一个最坏的情况是4次比较(当操作3时),第二个最坏的情况是2次比较(操作1或3)。也许第四个表可以给您带来一个非常有趣的结果。不必在第二个代码片段中重复
condition1
的可读性和可维护性比微不足道的性能改进要重要得多。