Javascript 使用while循环创建cron作业

Javascript 使用while循环创建cron作业,javascript,node.js,cron,Javascript,Node.js,Cron,有几个库(特别是针对NodeJS和Javascript)允许您实现cron作业,并随后将它们托管在服务器上 本质上,cron作业在我看来只不过是在一天中的特定时间/日期执行的重复任务 因此,我想知道这些库和自定义while循环之间有什么区别。例如,在Javascript中,我们可以编写: var keepRunning = true while (keepRunning) { setTimeout(function () { // call function to be

有几个库(特别是针对NodeJS和Javascript)允许您实现cron作业,并随后将它们托管在服务器上

本质上,cron作业在我看来只不过是在一天中的特定时间/日期执行的重复任务

因此,我想知道这些库和自定义while循环之间有什么区别。例如,在Javascript中,我们可以编写:

var keepRunning = true
while (keepRunning) {
    setTimeout(function () {
        // call function to be executed when time constraint satisfied
    }, 5000);
}
因此,我的问题是:

  • 为什么我们要使用cron作业库?上面的自定义函数有什么好处

Cron处理特定于时间的事件远比这好。如果你想每天早上9点发生什么事情,你就必须使用Cron,而不是像这样的方法

Cron从epoch开始测量时间,是最精确的任务调度方法。我还可以想象,这将带来比您建议的更好的性能


为什么不使用Cron?

Cron处理特定于时间的事件远比这好。如果你想每天早上9点发生什么事情,你就必须使用Cron,而不是像这样的方法

Cron从epoch开始测量时间,是最精确的任务调度方法。我还可以想象,这将带来比您建议的更好的性能


为什么不使用Cron?

库是有用代码的集合。这些集合倾向于将大量的函数、对象等组合起来


你的例子只是一种几乎没有多功能性的情况。库将为您的循环提供更多的选项,不仅仅是处理速率,还有其他因素(取决于您所指的特定库)。

库是有用代码的集合。这些集合倾向于将大量的函数、对象等组合起来


你的例子只是一种几乎没有多功能性的情况。库将为您的循环提供更多的选项,不仅仅是解决速率问题,还包括其他因素(取决于您所指的特定库)。

这不会像您预期的那样起作用:

var keepRunning = true
while (keepRunning) {
    setTimeout(function () {
        // call function to be executed when time constraint satisfied
    }, 5000);
}
该代码将尽可能快地调度新的
setTimeout
回调,而
keeprunning
为true,从不展开调用堆栈并让事件循环运行任何这些回调。它可能会消耗您所有的内存,而不会运行计划的代码,甚至不会运行一次

您可以这样做:

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);
}
如果要同时安排所有回调,则可以执行以下操作:

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);
}

for(设i=1;i这将不会像您预期的那样工作:

var keepRunning = true
while (keepRunning) {
    setTimeout(function () {
        // call function to be executed when time constraint satisfied
    }, 5000);
}
该代码将尽可能快地计划新的
setTimeout
回调,而
keepruming
是真的,永远不会解除调用堆栈并让事件循环运行这些回调中的任何一个。即使不运行计划的代码一次,它也可能会消耗您所有的内存

您可以这样做:

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);
}
如果要同时安排所有回调,则可以执行以下操作:

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);
}

用于(让i=1;i,因为这只是一个无限循环。祝你好运。Javascript是异步的。这段代码只是设置了无限多的超时,它会使你的浏览器快速崩溃。改为查找setInterval。这是我的问题,无限循环不是和cron作业一样吗?不,因为cron作业工作,在哪里无限循环会使脚本崩溃,通常会使选项卡/浏览器崩溃。是什么让它工作?这就是我不明白的。你是说无限循环会导致内存过载还是什么?无意冒犯,但你似乎没有太多经验,是吗?:)是的,正如您所猜测的,设置无限数量的任何指令都会使内存过载并立即使脚本崩溃。这就是您在这里所做的。您创建了一个无限循环(
while(true)
),在其中声明无限数量的异步任务(
setTimeout
).由于执行堆栈顺序,第一个超时甚至永远不会执行,脚本在此之前将崩溃。因此…这绝对不是cron作业。因为这只是一个无限循环。祝您好运。Javascript是异步的。这段代码只设置了无限多的超时,它将快速崩溃您的脚本浏览器。改为查找setInterval。这是我的问题,无限循环与cron作业不一样吗?不,因为cron作业可以工作,而无限循环会使脚本和选项卡/浏览器崩溃。是什么使它工作?这是我没有得到的。你的意思是无限循环会导致内存过载还是什么?无意冒犯,但你没有您似乎有很多经验,是吗?:)是的,正如您所猜测的,设置无限数量的任何指令都会使内存过载并立即使脚本崩溃。这就是您在这里所做的。您创建了一个无限循环(
while(true)
),在其中声明无限数量的异步任务(
setTimeout
).由于执行堆栈顺序,第一个超时甚至永远不会执行,脚本在此之前将崩溃。因此…这绝对不是一个cron作业。在Heroku上托管cron作业没有任何限制吗?在Heroku上托管cron作业没有任何限制吗?