这些代码示例之间的性能有何不同?
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);
}
我知道两者都很好但我不确定哪一个更好。
答案 0 :(得分: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);
}
答案 1 :(得分: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;
}
如果您的编译器在现代浏览器中运行良好,那么您只需要关注性能的&&
和||
符号。 ||
只评估左侧,如果是假,它将继续向右侧。巧妙地使用它们。
答案 2 :(得分: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
中的表达式代价昂贵,则可能会产生显着差异。如评论中所述,两个示例之间的差异也会改变逻辑。在这种情况下,将第二个语句设为else if
将保留原始逻辑。
这里有一个example,它说明了性能和逻辑与直接影响和副作用的区别。运行它并查看控制台。