我的javascript函数可以被动画帧中断吗?

时间:2014-10-06 08:22:59

标签: javascript multithreading animation requestanimationframe

我最近了解了requestAnimationFrame以及它如何用于与浏览器的内部绘制循环同步地安排动画代码。但我仍然有点不清楚浏览器如何处理这种类型的调度。如果有必要,它会中断我的脚本来执行动画吗?

考虑以下javascript代码:

function doStuff() {
  var animated = false;

  var animation = function() {
    // perform animation
    animated = true;
  }

  requestAnimationFrame(animation);

  // perform more operations here

  // Q: is animated guaranteed to be false here??

}

我知道Javascript本质上是单线程的,所以我的直觉是,当我们到达animation()的最后一行时,在任何情况下都不应该调用doStuff()。但希望这里有人可以给出更明智的答案。

1 个答案:

答案 0 :(得分:2)

你是对的,在至少调用doStuff之前,你的回调才会被调用。

动画内容的nascent specification是指窗口事件循环的HTML5规范queuing a task的概念。这与setTimeoutsetInterval使用的概念相同,当时间已过期,并且意味着当回调将在那个时刻排队时,浏览器会等待在执行队列中的下一个任务之前,下一个主要的JavaScript UI线程可用。事件发生同样的事情;事件可以随时发生,包括JavaScript代码运行时,但对处理程序的调用将排队,直到主UI线程可以自由处理它。


  

我知道Javascript本质上是单线程的......

JavaScript,这种语言,对线程的概念保持沉默。在浏览器中,有一个主要线程可以与DOM交互,零个或多个web worker线程不能(他们可以做其他事情,并与主UI线程交换消息,作为事件回调到达,其中......排队如上:-))。