2013-07-09 33 views
3

我有一个自动鸣叫每个用户做了一次应用程序...使用JavaScript进行速率限制和队列AJAX调用一次每15秒

用户可以方便地执行该操作每秒一次,如果他们喜欢。

Twitters速率限制说明它注意在15分钟内发生了多少个推文。从技术上讲,我认为我总是低于15分钟的标准,但它似乎像Twitter也说:“嘿,你可以在15分钟内发布15个帖子,但不是15秒内15个帖子”......这是合理的,我认为...

我想解决这个问题在JavaScript方面。我想要添加一些函数,而不是实际调用ajax,然后使用setTimeout函数来检查数组开头是否有函数调用,然后运行该函数,将其删除从阵列中等待15秒钟再次完成。

这将有助于减慢推文(阿贾克斯调用)随着时间的推移,以合理的东西。

这似乎是我应该用图书馆解决的问题,但是我看到的节流库似乎适应了ignore rather than store中间请求。 queue function on jquery似乎是动画,似乎过于复杂,但可能是正确的答案...

想法?

+0

一去这听起来相当简单。而不是推特,推到数组,并有一个简单的setTimeout弹出到Twitter - 只有一件事是保持用户在页面上,如果他想在所有推送 – mplungjan

+0

之前离开......并进一步采取@ mplungjan的答案,你甚至可以做到这一点您将推文整理成一个队列,但不是每隔15秒就发出一条推文,而是可以每15秒将所有悬而未决的推文汇总到一个向量中。这样,早点离开的“损失”就会降到最低。我对Twitter的API并不熟悉,但我希望将推文推送到他们的API中有一定的向量化能力。非常有趣。 –

+0

任何机会,你会返回和评论? – mplungjan

回答

2

有这个

<!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>