有几个库(特别是NodeJS和Javascript)允许您实现cron作业,然后将它们托管在服务器上。
从本质上讲,cron工作在我看来只不过是在一天的特定时间/日期执行的重复性任务。
我想知道这些库之间的区别是什么,只是让我们说一个自定义的while循环。例如在Javascript中我们可以写:
var keepRunning = true
while (keepRunning) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000);
}
我的问题是:
答案 0 :(得分:1)
Cron处理非常具体的时间事件比这更好。如果你想在每天上午9点发生某些事情,你绝对不得不使用Cron这样的方法。
Cron从时代开始测量时间,是调度任务的最准确方法。我还想象它会比你建议的更好。
你为什么不使用Cron?
答案 1 :(得分:1)
库是有用代码的集合。这些集合倾向于组合大量的功能,对象等。
你的例子只是一种几乎没有多功能性的情况。库将为您的循环提供更多选项,并且不仅仅是解决速率问题,还包括其他因素(取决于您所指的特定库)。
答案 2 :(得分:1)
这不会像您预期的那样起作用:
var keepRunning = true
while (keepRunning) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000);
}
该代码将尽可能快地安排新的setTimeout
回调,而keepRuning
为真,永远不会展开调用堆栈并让事件循环运行任何这些回调。如果不运行预定代码,它可能会占用你所有的内存。
你可以做的是这样的事情:
var keepRunning = true;
function run() {
if (keepRunning) {
// call function to be executed when time constraint satisfied
setTimeout(run, 5000);
}
}
setTimeout(run, 5000);
如果您想一次安排所有回调,那么您可能会这样做:
for (let i = 1; i <= 100; i++) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000 * i);
}
但是在这个示例中,您需要将超时乘以迭代变量,以确保它们不会被安排在同一时间运行 - 即它们仍然是一次性安排,但它们稍后会在不同时间运行。 / p>
请记住,JavaScript运行完成,并且稍后在调用堆栈展开时执行回调。同样重要的是for
和while
循环阻止事件循环执行,并且在循环运行时不能处理任何事件。