我正在使用 JavaScript 中的requestAnimFrame
方法在程序的主循环中更新画布:
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / 60);
};
})();
function animate() {
requestAnimationFrame( animate );
//var runcount = 100;
//for (var i=0;i<=100;i++) {
draw();
// if (runcount === i)
// alert("Completed program loop");
// }
}
发生的事情是我的程序仅在我的主循环运行 100次迭代后才更新画布然后停止。在我将上面的方法添加到我的主循环之后,我突然在我的程序的每个循环上都得到了画布更新。
在我的程序完成之前画布没有得到更新的事实让我认为画布更新是在另一个没有获得优先权的线程中运行的。(但我们知道JavaScript 是单线程的)。
我的问题是 -我们可以将 requestAnimFrame 视为应用程序循环上的“yield”以允许事件循环处理吗?我还能假设 JavaScript 是单线程的吗?