2

私には機能があります。スクリプト内の他の多くの関数からトリガーされています。時には非常に速く、ほとんど同時に

短時間で急激にトリガーされないようにするにはどうすればよいですか? ある種の遅延またはタイマーを設定することによって?関数が行うデータベース呼び出しを最小限に抑えたい

しかし、それが必要でない場合、関数に遅延があってはなりません.. 意味: 最初の呼び出し = 遅延なし。他のすべての呼び出し = 前回の呼び出しが x 秒未満の場合にのみ遅延します。遅延が 5 秒に設定されている場合、前の呼び出しが 4 秒前に行われた場合、関数は 1 秒だけ待機する必要があります。

function checkusers() {

    $.ajax({
        url: '/checkusers_in_db.php',
        type: 'POST'
    });

};
4

4 に答える 4

0

Underscore.jsにはメソッドdebounceがあり、ここで役立つ可能性があります

debounce_.debounce(function、wait、[immediate])渡された関数の新しいデバウンスされたバージョンを作成して返します。これは、最後に呼び出されてから待機ミリ秒が経過するまで実行を延期します。入力の到着が停止した後にのみ発生する動作を実装するのに便利です。例:Markdownコメントのプレビューのレンダリング、ウィンドウのサイズ変更が停止した後のレイアウトの再計算など。

http://underscorejs.org/#debounce

このように使用します:

checkusers_with_delay = _.debounce(checkusers, how_much_delay);

そして、checkusers_with_delay他の多くの機能でを使用します

于 2012-06-11T12:24:29.030 に答える
0

COMETパターン(ロングポーリング)を考えることができます

チェックユーザーをリファクタリングして、AJAX経由で呼び出すのではなく、ユーザーのキャッシュを確認します。別のコードとして、PHPページへのAJAX呼び出しがあります。これにより、戻ったときにユーザーキャッシュが更新されます。

秘密は、PHPがページに送り返すのに十分なデータが得られるまでHTTPリクエストを「保持」できることです。次に、応答を受信すると、ページは別のAJAXリクエストを作成し、すすぎ、繰り返します。

于 2012-06-11T12:24:32.813 に答える
-1

これにより、過去 30 秒間実行されていない場合に ajax がトリガーされます。

var last_checkuser_time = new Date();  

function checkusers() {

    var now = new Date();
    var timeout = now.setSeconds(now.getSeconds() - 30);
    if (last_checkuser_time < timeout) {

        $.ajax({
            url: '/checkusers_in_db.php',
            type: 'POST'
        });
        last_checkuser_time = new Date();
    }

};
于 2012-06-11T12:24:52.233 に答える