ブラウザーでは、JavaScript の実行はシングルスレッドです。これは、JS コードが実行されている間はsetInterval
関数が実行されないことを意味します。同様に、setInterval
関数の実行中は、他の JS コード (イベント ハンドラーなど) は実行されません。
したがって、短い間隔で実行されるコードが適切に機能することを確認することは確かに重要です。
この場合、1 秒に 1 回実行されるコードがあるため、完了するまでに << 1 秒かかることが重要です。そうしないと、他のアクションが発生するのに十分な時間を残さないリスクがあります。
jQuery を使用した場合 (および使用しない場合) の Cookie へのアクセスに関するパフォーマンス データは、こちら で入手できます。
それが示しているのは、読み取りと書き込みが十分に高速であるため、1 秒の更新間隔をあまり取らずに実行できるはずだということです。
別のアプローチは、次のことを試すことです
var timeoutId;
var timeoutSetter = function(timeout) {
timeoutId = setTimeout(function() {
cookieUpdate();
timeoutSetter(timeout);
}, timeout);
};
timeoutSetter(1000);
これは、更新自体にかかる時間に関係なく、最後の更新から1秒後までCookieが更新されないことを意味します...おそらくやり過ぎで、かなり危険なコードにつながりますが、オプションです。
アップデート
以下の Bergi のコメントに続いて、例が参考になると思いました。
http://jsfiddle.net/meYc5/2/にアクセスして、コンソールを開きます。Foo clicked
黄色いボックスをクリックするたびにログが表示されます。繰り返しクリックすると、黄色から赤に反転し、元に戻るのがわかります。かなりの遅延があります。これは、現在、setInteval
毎秒 500 ミリ秒スレッドをブロックするように構成されているためです。これは、イベントが 50% のデューティ サイクルで処理されることを意味します。
さらに、テキストエリア内のカーソルの反応が鈍くなっていることに気付くでしょう。
これ (500 ミリ秒) は、Cookie を更新するのに非常に長い時間ですが、原理を示しています。で何かをしている場合はsetInterval
、
execution time of the handler << interval period
イベントを処理するのに十分な高いデューティ サイクルを維持できるようにします。