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 をアプリケーション ループの「利回り」と見なすことはできますか? JavaScript はシングル スレッドであると想定できますか?