Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout vs setInterval-最佳使用实践_Javascript_Jquery_Timer - Fatal编程技术网

Javascript setTimeout vs setInterval-最佳使用实践

Javascript setTimeout vs setInterval-最佳使用实践,javascript,jquery,timer,Javascript,Jquery,Timer,我理解setTimeout和setInterval之间的区别,正如我很好地解释的那样 这个问题是关于使用计时器的最佳实践,特别是setTimeout vs setInterval 如果我需要在游戏中相当频繁地调用倒计时多次(例如,一名玩家移动到一个新位置,这会触发一个新的倒计时,这将鼓励他们在5秒内移动),但它不一定是统一的间隔(这意味着,他们应该移动到下一个位置,但可能会在当前位置逗留并受到处罚),从性能和代码角度来看,是否可以更好地执行以下操作: a) 当玩家决定更改位置时,保持清除和设置s

我理解setTimeout和setInterval之间的区别,正如我很好地解释的那样

这个问题是关于使用计时器的最佳实践,特别是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);  

我认为这两种方法都可以,除非你关心性能。当倒计时完成时,你正在做一些处理器密集型的事情。在这种情况下,我会说这取决于球员移动的频率。如果他们烦躁不安(频繁移动),那么继续使用setInterval。如果它们只是偶尔移动,那么setTimeout可能会更好

在性能方面是否更好

在不需要计时器的时候不让计时器在身边绝对是更好的。不管它们是用
setTimeout
还是
setInterval
实现的

而且代码清晰


这取决于“玩家决定改变位置”的频率,以及这是如何通知代码的。这可能会在行为上产生实际的差异,您应该致力于保持代码的正确性—独立于输入的顺序和时间。保持简单,选择你需要的。

你所说的“一致调用”但“不一定是一致间隔”是什么意思?@Bergi说得不对。我是说我需要倒计时很多次。。。当玩家每次移动到一个新的指定位置时(比如,跳到棋盘上的一个新方块上,它将开始一个新的倒计时,或者重置倒计时),我明白了。但是这些倒计时不是同时进行的,是吗?@Bergi不,它们不需要也不应该。就你所描述的用途而言,性能甚至不是一个很小的因素。如果您处于空闲模式,setTimeout允许您暂时增加延迟,而无需重新订阅,但性能大致相同。玩家需要在5秒内做出移动决定。。。但他们不一定需要移动(即,如果他们不移动,他们将失去分数)-这就是“不一定均匀间隔”听起来像是你想要单独触发(启动和停止)间隔的地方。