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

Using Javascript to rate limit and queue ajax calls to once every 15 seconds

本文关键字:15秒 设置 一次 队列 ajax Javascript 调用 速率 使用      更新时间:2023-09-26

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

如果用户愿意,他们可以很容易地每秒执行一次该操作。

推特速率限制表示,它关注15分钟内有多少条推特。从技术上讲,我认为我总是低于15分钟,但推特似乎也在说"嘿,你可以在15分钟内发布15条帖子,但不能在15秒内发布15条"。。。我认为这是合理的。。。

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

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

这似乎是我应该用库来解决的问题,但我看到的节流库似乎准备忽略而不是存储中间请求。jquery上的队列函数似乎是用于动画的,看起来过于复杂,但可能是正确的答案。。。

想法?

试试这个

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