Spotify中持久的setTimeout调用偶尔会冻结UI 2秒

时间:2012-09-12 14:40:49

标签: javascript spotify

我一直在制作一个动画Spotify应用程序并且遇到了问题。在尝试尽可能地削减动画代码并且仍然遇到口吃之后,我删除了除了setTimeout函数之外的所有内容。在调试器中查看时间轴确认stuttering持续存在。

为了测试这个问题,我编写了以下代码片段并在Spotify和chrome中运行它:

var delta;
var newTime;
var oldTime = new Date().getTime();
var startTime = new Date().getTime();
function updateFrame() {
    newTime = new Date().getTime();
    delta = newTime - oldTime;
    if (delta>500 ) {
        console.log(delta + " @ " + Math.round((newTime-startTime)/1000) + " seconds");
    }
    oldTime = newTime;
    setTimeout("updateFrame()",50);
}

在spotify中,典型输出如下所示:

 2168 @ 14 seconds
 2150 @ 51 seconds
 2151 @ 111 seconds
 2166 @ 171 seconds
 2174 @ 231 seconds
 2194 @ 291 seconds
 2181 @ 351 seconds
 2259 @ 411 seconds
 2216 @ 471 seconds

在这两秒钟内,整个Spotify UI完全没有响应,同时音乐会继续播放并且会记录击键。使用setInterval,不同的setTimeout间隔,以及在更新函数中更改setTimeout的位置似乎都没有任何效果。

在Chrome中,在标签变为非活动状态之前不会记录任何内容:

 1002 @ 9 seconds 
 1001 @ 10 seconds 
 1000 @ 11 seconds 
 1001 @ 12 seconds 
 1003 @ 13 seconds 
 1000 @ 14 seconds 
 1006 @ 15 seconds

我不知道如何解决这个问题 - 我觉得我做错了,因为我使用过冻结Spotify的其他应用程序。这可能是因为他们没有包含持久的setTimeout调用,但我不确定如何在没有它们的情况下创建动画。

0 个答案:

没有答案