2

这些代码示例在性能方面是否存在差异?

if (this.game.physics.arcade.overlap(this.player, this.barels) && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency) || (this.player.position.y > this.game.height + 100)) {
  this.damage(1);
}

或者

if (this.game.physics.arcade.overlap(this.player, this.barels) && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)) {
  this.damage(1);
}

if (this.player.position.y > this.game.height + 100) {
  this.damage(1);
}

我知道两者都可以正常工作,但我不确定哪个更好。

4

3 回答 3

1

我认为最好将所有内容合二为一,而不是一分为二。原因是你会打一个 if 语句而不是两个。

为了便于阅读,我将对第一个进行更改并将其格式化为以下格式:

if (this.game.physics.arcade.overlap(this.player, this.barels)
                && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)
                || (this.player.position.y > this.game.height + 100))
            {
                this.damage(1);
            }
于 2016-03-17T14:03:02.613 回答
1

您可以拆分条件,不仅是为了可读性,而且是为了重用、可维护性和可用性:

if (overlap() && frequency() || position())
{
    this.damage(1);
}

function frequency(){
    return this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency;
}

function overlap(){
    return this.game.physics.arcade.overlap(this.player, this.barels);
}

function position(){
    return this.player.position.y > this.game.height + 100;
}

如果您的编译器运行良好,就像现代浏览器中的任何情况一样,您只需要关心性能的&&||符号即可。||只会评估左侧,如果这是错误的,它将继续到右侧。巧妙地使用它们。

于 2016-03-17T14:05:34.150 回答
1

是的。在第一个版本中,这...

(this.player.position.y > this.game.height + 100)

...只有在这个...时才会被评估

this.game.physics.arcade.overlap(this.player, this.barels) &&
(this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)

...评估为false. 在第二个版本中,无论如何都会对其进行评估。因此,如果第二if个示例中的第二个表达式会很昂贵,那么它可能会产生重大影响。如评论中所述,您的两个示例之间的差异也改变了逻辑。在这种情况下,使第二个语句 anelse if将保留原始逻辑。

这是一个示例,说明了性能和逻辑与直接影响和副作用的差异。运行它并查看控制台。

于 2016-03-17T14:08:38.587 回答