服务器端的Meteor.setInterval,性能?

时间:2015-07-08 20:41:18

标签: meteor

我一直在寻找一种清理24小时后可能不需要的数据库条目的方法,我正在调查流星代码:https://github.com/meteor/meteor/blob/832e6fe44f3635cae060415d6150c0105f2bf0f6/packages/oauth/pending_credentials.js

我找到了这个部分:

// Periodically clear old entries that were never retrieved
var _cleanStaleResults = function() {
  // Remove credentials older than 1 minute
  var timeCutoff = new Date();
  timeCutoff.setMinutes(timeCutoff.getMinutes() - 1);
  OAuth._pendingCredentials.remove({ createdAt: { $lt: timeCutoff } });
};
var _cleanupHandle = Meteor.setInterval(_cleanStaleResults, 60 * 1000);

我无法找到任何功能的执行。我想知道var _cleanupHandle是否意味着它会每60秒执行一次?如果它看起来很奇怪,每60秒运行一次无穷无尽的功能?这可能是一般的javascript问题,但我真的想了解这种事情的表现,如果我能安全地重新使用这种技术?我的主要目标是在服务器上存储临时数据,并在不需要之后将其删除。

1 个答案:

答案 0 :(得分:2)

我建议使用https://atmospherejs.com/percolate/synced-cron等任务队列库。

对于这种方法,您只需指定任务并启动它。您也可以随时结束任务。请注意,这都是服务器端。

添加任务

SyncedCron.add({
  name: 'Crunch some important numbers for the marketing department',
  schedule: function(parser) {
    // parser is a later.parse object. NOTE THAT THIS IS WHERE YOU SPECIFY THE FREQUENCY
    return parser.text('every 2 hours');
  },
  job: function() {
    var numbersCrunched = CrushSomeNumbers();
    return numbersCrunched;
  }
});

开始任务

SyncedCron.start();

停止所有任务

SyncedCron.stop()

还有更多选项,所以我建议查看文档。