Hay varias bibliotecas (especialmente para NodeJS y Javascript) que le permiten implementar trabajos cron y luego alojarlos en un servidor.
En esencia, los trabajos cron me parecen nada más que tareas repetitivas que se ejecutan en una hora/fecha específica en un día.
Por lo tanto, me preguntaba cuál es la diferencia entre estas bibliotecas y, digamos, un ciclo while personalizado. Por ejemplo en Javascript podríamos escribir:
var keepRunning = true while (keepRunning) { setTimeout(function () { // call function to be executed when time constraint satisfied }, 5000); }Mis preguntas son por lo tanto:
Esto no funcionaría como cabría esperar:
var keepRunning = true while (keepRunning) { setTimeout(function () { // call function to be executed when time constraint satisfied }, 5000); } Ese código programará nuevas devoluciones de llamada de setTimeout lo más rápido posible mientras que keepRuning es verdadero, nunca deshaciendo la pila de llamadas y permitiendo que el bucle de eventos ejecute cualquiera de esas devoluciones de llamada. Es probable que consuma toda su memoria sin ejecutar el código programado ni una sola vez.
Lo que puedes hacer es algo como esto:
var keepRunning = true; function run() { if (keepRunning) { // call function to be executed when time constraint satisfied setTimeout(run, 5000); } } setTimeout(run, 5000);Si desea programar todas las devoluciones de llamada a la vez, puede hacer algo como esto:
for (let i = 1; i <= 100; i++) { setTimeout(function () { // call function to be executed when time constraint satisfied }, 5000 * i); }pero en este ejemplo, debe multiplicar el tiempo de espera por la variable de iteración para asegurarse de que no estén programados para ejecutarse al mismo tiempo, es decir, todavía están programados todos a la vez, pero luego se ejecutan en diferentes momentos.
Recuerde que JavaScript se ejecuta hasta el final y las devoluciones de llamada se ejecutan más tarde cuando la pila de llamadas se desenrolla. También es importante que los bucles for y while bloqueen la ejecución del bucle de eventos y no se pueda manejar ningún evento mientras se ejecuta el bucle.
Cron maneja eventos específicos de tiempo mucho mejor que esto. Si quisiera que algo sucediera a las 9 a.m. todos los días, absolutamente tendría que usar Cron sobre algún método como este.
Cron mide el tiempo a partir de la época y es la forma más precisa de programar tareas. También me imagino que daría como resultado un mejor rendimiento que lo que sugieres.
¿Por qué NO usarías Cron?
Una biblioteca es una colección de código útil. Esas colecciones suelen agrupar una cantidad importante de funciones, objetos, etc.
Su ejemplo fue solo una situación que tenía muy poca versatilidad. Las bibliotecas proporcionarían muchas más opciones para su bucle e irían más allá de solo abordar la tasa, sino también otros factores (dependiendo de la biblioteca específica a la que se refiera).