4

私は興味深い Javascript を含むサイトに取り組んでおり、低速のマシンでパフォーマンスの問題が発生するのではないかと心配しています。

このスクリプトは、setInterval を使用してハンドラーを毎秒実行します。ハンドラーは次のことを行います。

  1. 単一の Cookie 値を読み取る (jquery Cookie プラグインを使用)
  2. その値と有効期限を更新する
  3. クッキージャーに書き戻す

Cookie には有効期限があるため、理論的にはメモリに保持するのではなく、毎回ディスクに書き込む必要があります。

これまでのところ、私の PC では問題なく動作しますが、ソリッド ステート ドライブを搭載した高速なマシンを使用しています。この設計により、低速のボックスまたはビジー状態のハードディスクで問題が発生すると思いますか? 1 秒ごとに発生する軽微な吃音が原因でしょうか? このデザインが完全に正気ではないという安心感を探しているだけです. ありがとう。

4

1 に答える 1

6

ブラウザーでは、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

イベントを処理するのに十分な高いデューティ サイクルを維持できるようにします。

于 2013-10-03T02:13:37.417 に答える