Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 降低ajax调用/xhr请求速度的最佳方法_Javascript_Ajax - Fatal编程技术网

Javascript 降低ajax调用/xhr请求速度的最佳方法

Javascript 降低ajax调用/xhr请求速度的最佳方法,javascript,ajax,Javascript,Ajax,我不确定我的问题措辞是否正确,但我有下面的代码。基本上,我们希望发出一个ajax请求,检查回调,然后重新执行ajax,直到得到所需的响应(在示例connectedvoter==1中) 问题是它只需要80毫秒,而xhr的数量在这个速度下会以非常快的速度达到巨大的数字。我试图想出一种“暂停”的方法,但我能想到的一切都耗尽了cpu 有没有一种方法可以“减慢”请求的数量,比如说每秒一次或两次而不消耗cpu var connctedvoter = 0; var govoters = function ()

我不确定我的问题措辞是否正确,但我有下面的代码。基本上,我们希望发出一个ajax请求,检查回调,然后重新执行ajax,直到得到所需的响应(在示例connectedvoter==1中)

问题是它只需要80毫秒,而xhr的数量在这个速度下会以非常快的速度达到巨大的数字。我试图想出一种“暂停”的方法,但我能想到的一切都耗尽了cpu

有没有一种方法可以“减慢”请求的数量,比如说每秒一次或两次而不消耗cpu

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();

只需增加超时的延迟:

if(!response.connectedvoter) {
  setTimeout(govoters, 2000); // instead of 150
}
而不是一秒钟10个请求:

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

请注意,对于“开始”,您可以从以下内容进行更改:

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

//DO THIS TO START
govoters();

这里实际上不需要超时。

只需使用以下代码更改行:

setTimeout(govoters, 150);
与:


哈,那很容易。。。谢谢,也许你应该意识到这一点!
setTimeout(govoters, 1000); // 1 second