Изглежда имам някои неочаквани резултати с брояч на кадри в javascript. Доскоро броячът беше наред и работех с малкото си js приложение при 30 кадъра в секунда.
Той използва setTimeout() (с корекция на времето, за да се противопостави на „изоставането“ на системата).
window.requestAnimFrame = (function()
{
return function (callback) {
time += FPS;
Heartbeat._eTime = (new Date().getTime() - Heartbeat._start);
var diff = Heartbeat._eTime - time;
Heartbeat._delta = FPS - diff;
Heartbeat._deltaS = Heartbeat._delta / 1000;
window.setTimeout(callback, FPS - diff);
};
})();
Heartbeat е просто обект, който съдържа информация за кадровата честота.
*Ето моят проблем: *
_MainLoopHandler: function () {
timer = new Date().getTime();
counter = timer;
while (this._messages.length > 0 && (counter - timer) < 5)
{
// process messages from _messages array
}
counter = new Date().getTime();
// THE ABOVE IS HAPPY AT 30 FPS
while ((counter - timer) < 6) {
1 + 1;
}
// THE ABOVE WHILE IS VERY UNHAPPY :(
}
Така че горният кодов блок е функцията, която се извиква от setTimeout на всеки 33,33 милисекунди (30 fps). ако извадя долния цикъл while, броячът на FPS ще седи щастливо на 30 кадъра в секунда. Въпреки това, ако го оставя вътре, FPS броячът полудява. стига до 200FPS 300FPS, след което внезапно отива -200FPS -10FPS 0.01FPS. Напълно е извън стената. Цикълът while ще се изпълнява само може би 10 пъти на "кадър".
Обърнете внимание също, че твърдо кодираните стойности 5 и 6 са просто проверка, за да видите дали са изминали 5 или 6 милисекунди при обработката на циклите (за балансиране на натоварването).
Дали това просто javascript не може да се справи с количеството информация или някой друг е имал подобен проблем.
Благодаря!