setTimeout vs setInterval - 使用的最佳实践

时间:2014-11-13 18:58:53

标签: javascript jquery timer

我理解setTimeout和setInterval之间的区别,因为this很好地解释了它。

这个问题是关于使用计时器的最佳实践,特别是setTimeout vs setInterval。

如果我需要在游戏中频繁地多次调用倒计时(例如,玩家移动到新位置,这会触发新的倒计时,这将鼓励他们在 5秒内移动 ),但它不一定是统一的间隔(意思是,它们应该移动到下一个位置,但可以在当前位置挂出并受到惩罚),是否在性能方面更好,并且代码清洁:

a)在玩家决定更改位置时继续清除并设置setTimeout()

if (player.newLocation !== player.oldLocation) { //player location has changed
        window.clearTimeout(myTimer);
        myTimer = setTimeout(function() { 
            do something
        },50);  
} 

b)保持setInterval运行,但每次玩家移动到新位置时更改一个充当倒计时的变量

var counter = 0;
if (player.newLocation !== player.oldLocation) {
    counter = 100;
}

myTimer = setInterval(function() { 
    if (counter > 0) {
          // do something...
          counter--;
    }
},50);  

2 个答案:

答案 0 :(得分:2)

  

性能更好吗

如果不需要定时器,那么它们肯定会更好。无论他们是使用setTimeout还是setInterval实现的。

  

并清理代码

这取决于(通常)“玩家决定更改位置”的方式,以及如何向您的代码发出信号。它可能会在行为上产生实际差异,您的目标应该是保持代码正确 - 独立于输入的顺序和时间。保持简单,并选择您需要的。

答案 1 :(得分:0)

我认为除非你关注性能,否则做任何一个都可能没问题。也就是说,倒计时完成后你正在做一些处理器密集的事情。在那种情况下,我会说这取决于球员移动的频率。如果他们是抽搐(移动很多),那么继续使用setInterval。如果他们只是偶尔移动那么setTimeout可能会更好。