javascript のフレームレート カウンターで予期しない結果が発生しているようです。最近までカウンターは問題なく、小さな js アプリを 30fps で実行していました。
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);
};
})();
ハートビートは、フレーム レート情報を含む単なるオブジェクトです。
*ここに私の問題があります:*
_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 :(
}
したがって、上記のコード ブロックは、33.33 ミリ秒 (30 fps) ごとに setTimeout から呼び出される関数です。ループアウト中に下を取ると、FPS カウンターは 30fps で満足に座ります。しかし、そのままにしておくと、FPS カウンターが狂ってしまいます。200FPS 300FPS まで上がり、突然 -200FPS -10FPS 0.01FPS になります。完全に壁から外れています。while ループは、「フレーム」ごとにおそらく 10 回しか実行されません。
また、ハードコーディングされた値 5 と 6 は、ループの処理中に (負荷分散のため) 5 ミリ秒または 6 ミリ秒が経過したかどうかを確認するための単純なチェックです。
これは単に JavaScript が大量の情報を処理できないのか、それとも他の誰かが同様の問題を抱えているのか.
ありがとう!