Я использую requestAnimFrame
метод в JavaScript, чтобы сделать свой холст обновить в основном цикле моей программы:
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 является однопоточным?