スクリプトに取り組んでいると、私の ajax が意図したよりも約 10 倍多く riring していることに気付きました。毎秒約 35 フレームで動作します。次の設定を使用します。
function load(){
//other code that does not effect this
requestAnimFrame(function(){
load();
});
debug();//function i was using to catch fps
}
window.requestAnimFrame = (function(callback){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 100);
};
})();
現在、google chrome は window.setTimeout(callback, 100); に入力した値を気にしていないようです。それは1かもしれないし、10000000かもしれない それは無防備に約130フレームで実行される
一方、私は setTimeout(load, 100); を使用していました。それに変更すると、すべてのブラウザが約 30fps で動作し始めます
function load(){
//other code that does not effect this
debug();//function i was using to catch fps
setTimeout(load, 100);
}
そのようにするのは悪い習慣ですか、それとも時代遅れですか?ポイントは、requestAnimFrameを使用している理由がよくわからないということです。オンラインで見つけたすべての例でもそれを使用しており、指定された目標を達成しているようです。そして、私が何度も何度も負荷をかけている唯一の理由は、新しい情報が得られるかどうかを確認することです..
編集そして、これを将来読む人のために。コードを 1 行ずつ実行した後、3x を説明するロジックのエラーが見つかりました。私は load() を呼び出して実行していないことを確認しましたが、
function connected(result){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
//code that does not matter for this
}else if (xmlhttp.status==404){
alert("epic failure i lost the page");
}
d_time = new Date().getTime();
load();
}
Connect は xmlhttp.onreadystatechange=connected によって呼び出されていました。そのため、3 セットの load(); を実行すると、何度も起動する可能性があります。私がする必要があったのはこれでした:
function connected(result){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
d_time = new Date().getTime();
load();
}else if (xmlhttp.status==404){
alert("epic failure i lost the page");
}
}
シュミットとパトリックの両方がここで助けてくれました。私が初心者であり、間違ったことをしていたことを知らせて、シュミットします。その機能で何が起こっていたのかを正確に理解するのを手伝ってくれたパトリック