1

質問の言い回しが正しいかどうかはわかりませんが、以下のコードがあります。基本的に、ajaxリクエストを作成し、コールバックを確認し、目的の応答が得られるまでajaxを再実行します(例ではconnectedvoter == 1)。

問題は、80ミリ秒ほどしかかからず、xhrの量がその速度で非常に速く膨大な数になることです。「一時停止」する方法を考え出そうとしましたが、考えられるすべてのことがCPUを使い果たしました。

CPUを使い果たすことなく、1秒に1〜2回と言うように、要求の量を「遅くする」方法はありますか?

var connctedvoter = 0;
var govoters = function () {
        $.ajaxSetup({
            async: false
        });
        var url = "getconnectedvoter.php";
        var data = {
            userid: userid
        };
        $.getJSON(url, data, callback);
    };
var pausevoters = function () {
        console.log("pausing ajax voters");
    };
var callback = function (response) {
        if (response.error) {
            return;
        }
        if (response.connectedvoter == 0) {
            setTimeout(govoters, 150);
            //govoters();
        } else {
            $('#vanid').html(response.vanid);
            $('#name').html(response.name);
            $("#mapurl").attr("src", response.mapurl);
            $('.call').fadeIn();
            return;
        }
    };
//DO THIS TO START
setTimeout(govoters, 150);
pausevoters();
4

2 に答える 2

2

タイムアウトの遅延を増やすだけです。

if(!response.connectedvoter) {
  setTimeout(govoters, 2000); // instead of 150
}

1秒間に10回のリクエストの代わりに:

setTimeout(govoters, 150); // one request every 150 millisecond. 

開始するには、これから変更できることに注意してください。

//DO THIS TO START
setTimeout(govoters, 150);

これに:

//DO THIS TO START
govoters();

ここではタイムアウトの必要はありません。

于 2012-05-21T22:28:11.957 に答える
0

このコードで行を変更するだけです:

setTimeout(govoters, 150);

と:

setTimeout(govoters, 1000); // 1 second
于 2012-05-21T22:31:57.183 に答える