假设我有一个链接聚合应用,用户在链接上投票。我使用由算法生成的热度分数对链接进行排序,该算法在链接被投票时运行。然而,在每次投票中运行它似乎过度。我如何限制它,使其运行时间不超过每5分钟一次。
答案 0 :(得分:1)
a)使用cron job
b)跟踪上次运行程序时的时间戳,以及当前时间戳 - 您存储的时间戳> 5分钟后运行程序并更新时间戳。
答案 1 :(得分:1)
var yourVoteStuff = function() {
...
setTimeout(yourVoteStuff, 5 * 60 * 1000);
};
yourVoteStuff();
在询问为什么不使用setinterval之前,请阅读下面的评论。
为什么“为什么设置间隔”而没有“为什么要做cron工作?”?我错了吗?
答案 2 :(得分:1)
我已将此解决方案用于生产级别,我可以告诉您,它也能很好地扩展。
使用示例;
var MIN = 5; // don't run aggregation for short queue, saves resources
var THROTTLE = 10; // aggregation/sec
var queue = [];
var bucket = [];
var interval = 1000; // 1sec
flow.on("submission", function(link) {
queue.push(link);
});
___aggregationLoop(interval);
function ___aggregationLoop(interval) {
setTimeout(function() {
bucket = [];
if(queue.length<=MIN) {
___aggregationLoop(100); // intensive
return;
}
for(var i=0; i<THROTTLE; ++i) {
(function(index) {
bucket.push(this);
}).call(queue.pop(), i);
}
___aggregationLoop(interval);
}, interval);
}
干杯!