私は、各ブラウザのすべての JavaScript 実装の詳細にあまり精通していません。ただし、setTimeout を使用すると、渡されたメソッドが別のスレッドで呼び出されることはわかっています。では、メソッド内で setTimeout を再帰的に使用すると、スタック オーバーフローが発生するまでそのスタックが無期限に拡大するのでしょうか? それとも、別のコールスタックを作成し、フォーカスが外れたら現在のフレームを破棄しますか? 気になるコーデはこちら。
function pollServer()
{
$.getJSON("poll.php", {}, function(data){
window.setTimeout(pollServer, 1000);
});
}
window.setTimeout(pollServer, 0);
サーバーを毎秒ポーリングしたいのですが、「ブロッキング ループ」で CPU サイクルを浪費したくありません。また、ユーザーがページにアクセスできる時間制限を設定したくありません。
編集
firebug を使用していくつかのブレークポイントを設定し、[スクリプト -> スタック] パネルを表示すると、コール スタックが文字通り単なる「pollServer」であり、コールごとに増加しないことがわかりました。これは良いことですが、JS の他の実装は異なる動作をしますか?