Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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调用的速率限制和队列设置为每15秒一次_Javascript_Jquery_Queue_Throttling - Fatal编程技术网

使用Javascript将ajax调用的速率限制和队列设置为每15秒一次

使用Javascript将ajax调用的速率限制和队列设置为每15秒一次,javascript,jquery,queue,throttling,Javascript,Jquery,Queue,Throttling,我有一个应用程序,每次用户做某事时都会自动推特 如果用户愿意,可以轻松地每秒执行一次该操作 Twitters rate limit表示,它关注15分钟内的推文数量。从技术上讲,我认为我总是低于15分钟,但twitter似乎也在说“嘿,你可以在15分钟内发布15篇帖子,但不能在15秒钟内发布15篇帖子”。。。我认为这是合理的 我想在javascript方面解决这个问题。我希望有一个函数数组,我将其添加到数组中,而不是实际调用ajax,然后进行setTimeout查看,检查数组开头是否有函数调用,运

我有一个应用程序,每次用户做某事时都会自动推特

如果用户愿意,可以轻松地每秒执行一次该操作

Twitters rate limit表示,它关注15分钟内的推文数量。从技术上讲,我认为我总是低于15分钟,但twitter似乎也在说“嘿,你可以在15分钟内发布15篇帖子,但不能在15秒钟内发布15篇帖子”。。。我认为这是合理的

我想在javascript方面解决这个问题。我希望有一个函数数组,我将其添加到数组中,而不是实际调用ajax,然后进行setTimeout查看,检查数组开头是否有函数调用,运行该函数,将其从数组中删除,然后等待15秒再次执行

随着时间的推移,这将有助于将tweet(ajax调用)的速度降低到合理的程度

这似乎是我应该用一个库来解决的问题,但我所看到的节流库似乎适合于中间请求。这似乎是为动画,似乎过于复杂,但可能是正确的答案

想法?

试试这个

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Queue things</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
var myQueue=[],msgNum=0;
function queueIt(item) {
  myQueue.push({ "item":item, "ts":new Date().getTime()});
}
function processQueue() {
  if (myQueue.length===0) return;
  var obj = myQueue.shift();
  $("#content").append('<br/>'+obj.item+" "+diff(obj.ts));
}
function diff(ts) {
    var t = new Date().getTime()-ts;
    return t + "ms ago";
}
$(function(){
    $("#clickMe").on("click",function() {
        msgNum++;
        queueIt("Message #"+msgNum);
    });
    setInterval(processQueue,15000);
});

</script>
</head>
<body>
<input type="button" id="clickMe" value="Queue something"/>
<div id="content"></div>
</body>
</html>

排队
var myQueue=[],msgNum=0;
函数队列(项目){
push({“item”:item,“ts”:new Date().getTime()});
}
函数processQueue(){
if(myQueue.length==0)返回;
var obj=myQueue.shift();
$(“#内容”).append(“
”+obj.item+”+diff(obj.ts)); } 功能差异(ts){ var t=new Date().getTime()-ts; 返回t+“毫秒前”; } $(函数(){ $(“#单击我”)。在(“单击”,函数()上{ msgNum++; queueIt(“消息#”+msgNum); }); setInterval(processQueue,15000); });
听起来很直截了当。与其发推,不如点击数组,在推特上设置一个简单的setTimeout弹出按钮——如果用户想在所有推特发出之前离开,唯一的办法就是让他保持在页面上。。。进一步考虑@mplungjan的答案,您甚至可以将推文整理成一个队列,但您可以每15秒将所有待处理的推文聚合成一个向量,而不是每15秒发送一条推文。这样,早退的“损失”就最小化了。我不熟悉Twitter的API,但我有一半的人认为将推特推送到他们的API中会有一些矢量化的能力。很有意思。你有没有可能回来发表评论?