6

这个问题与这个较旧的问题有关,但我想确保在开始对代码进行重大更改之前得到正确的答案。

我正在开发一个计算密集型的 JavaScript 程序,它需要不断更新 HTML5 画布中的图像以绘制动画。正如现在所写的那样,代码在一个紧密的循环中绘制动画的所有帧,而不会将控制权返回给浏览器,这意味着最终显示的只是最后一帧。我很确定解决这个问题的唯一方法是将动画代码拆分成更小的部分,这些部分可以通过超时事件重入调用。这个对吗?或者有没有办法强制画布在某个点显示其内容,即使在一个紧密的 JavaScript 循环中间?

4

2 回答 2

5

我很确定解决这个问题的唯一方法是将动画代码拆分成更小的部分,这些部分可以通过超时事件重入调用。这个对吗?

正确的。

Javascript 是单线程的,因此在执行您的逻辑时无法发生其他任何事情。您唯一的选择是通过将您的逻辑拆分为要在超时时执行的微块来“模拟”线程。

于 2011-05-16T07:52:54.193 回答
4

如果可用,您可以为此使用网络工作者。只需计算您需要在 webworkers 中执行的所有操作,并在完成后将结果发布回来。当您发回消息时,您只需刷新图像即可。计算将在后台完成,您的页面只会在更新图像时阻塞。

于 2011-05-16T08:35:10.627 回答