2013-07-13 51 views
0

我有一个简单的倒计时脚本(jsFiddle)。Chrome setTimeout()计时问题

var time = 60; 
function countDown(timeLeft){ 
    $("#timeLeft").text(timeLeft); 
    if(timeLeft!=0){ 
     setTimeout(function(){ countDown(--timeLeft); }, 1000); 
    } 
} 
countDown(time); 

出于某种原因,如果我在Chrome运行和重点不同的选项卡上,计时器慢两倍比它应该是...所以,当我在同一时间运行在手机上的独立计时器它正常运行,当我用计时器重新回到选项卡时,它显示剩余30秒。当包含脚本的选项卡处于焦点时它工作得很好,只有在后台打开时它才会非常缓慢。它不会发生在Firefox中。这是一种奇怪的错误还是我做错了什么?

+0

http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs –

回答

1

问题是你设置了太多的setTimeout函数,time = 60,有60 setTimeouts,所以它们会损害你的性能。您可以使用的setInterval来代替:

function countDown(timeLeft){ 
var intervalProc = setInterval(function(){ 
    $("#timeLeft").text(timeLeft); 
    timeLeft--; 
    if(timeLeft <= 0){ 
    clearInterval(intervalProc); 
    } 
}) 

} 
+1

您的解决方案可以帮助,但只有部分 - 倒计时现在慢1.5倍,而不是~2([更新jsFiddle](http://jsfiddle.net/GZsah/2/))。我想这对于准确的测量,我将不得不求助于[这个问题]的答案(http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab -is-inactive-in-chrome) –

+0

是的,你是对的,我刚刚意识到它!这就像浏览器吸收后台循环。另外,我尝试用html5中的web worker解决它,它运行完美:D – Rikky