私は各ブラウザのすべてのjavascript実装の詳細にあまり慣れていません。しかし、setTimeoutを使用すると、渡されたメソッドが別のスレッドで呼び出されることがわかります。だからメソッドの内部で再帰的にsetTimeoutを使用すると、Stack Overflowが発生するまでスタックが無期限に拡張されますか?または、別の呼び出しスタックを作成し、フォーカスが外れた後に現在のフレームを破棄しますか?ここに私が思っているコードがあります。Javascript Pollサーバー。これはスタックのオーバーフローを引き起こしますか?
function pollServer()
{
$.getJSON("poll.php", {}, function(data){
window.setTimeout(pollServer, 1000);
});
}
window.setTimeout(pollServer, 0);
私は、毎秒かそこらのサーバーをポーリングしたいが、「ループ・ブロッキング」でCPUサイクルを無駄にしたくない - また、私は、ユーザーがアクセスすることができますどのくらいにいるtimelimitを設定する必要はありませんページがブラウザが消える前に放火犯を使用して
EDIT
、私はいくつかのブレークポイントを設定し、「スクリプト - >スタック」表示することによって、パネルをコールスタックは文字通り「pollServer」であり、それは呼び出しごとに成長しないことがわかりました。これは良いことですが、JSの他の実装は異なった動作をしますか?
これは私の実装と非常によく似ています。これがSOを引き起こさないことが保証されているなら、それは私のコードではないようです。 – nlaq
大きな違いは、あなたの懸念の原因である 'setTimeout'とは対照的に、' setInterval'を使用していることです。私があなたのところにいたら、 'setInterval'のために行き、自分自身を頭痛から救います。 –
プロトタイプのPeriodicalExecutorのjQueryバージョンはありますか? –