【问题标题】:Using Javascript to rate limit and queue ajax calls to once every 15 seconds使用 Javascript 对每 15 秒一次的 ajax 调用进行速率限制和排队
【发布时间】:2013-07-06 15:32:58
【问题描述】:

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

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

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

我想在 javascript 端解决这个问题。我想要一个函数数组,我添加而不是实际调用 ajax,然后有一个 setTimeout 外观,检查数组开头是否有函数调用,运行该函数,删除它从阵列中取出并等待 15 秒再执行一次。

这将有助于随着时间的推移将推文(ajax 调用)减慢到合理的程度。

这似乎是我应该用一个库来解决的问题,但我看到的限制库似乎适合 ignore rather than store 中间请求。 queue function on jquery 似乎是用于动画并且看起来过于复杂,但可能是正确的答案......

想法?

【问题讨论】:

  • 这听起来很直接。而不是推文,推送到数组并在推特上弹出一个简单的 setTimeout - 如果用户想在所有推文之前离开,唯一的事情就是让用户留在页面上
  • ... 并进一步了解@mplungjan 的答案,您甚至可以将推文整理到队列中,但您可以聚合所有待处理的推文,而不是每 15 秒发出一条推文每 15 秒进入一个向量。这样,早退的“损失”就降到了最低。我不熟悉 Twitter 的 API,但我有一半希望将推文推送到他们的 API 将具有一定的矢量化能力。很有趣。
  • 你有机会回来评论吗?

标签: javascript jquery queue throttling


【解决方案1】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多