Node.js 常见调度器:
Author:zhoulujun Date:
上篇文章《通过node-cron实现nodejs实现定时任务/调度》讲过定时任务使用 systemd 和 cron的区别?以及nodejs如何通过node-cron实现任务调度。但是nodejs任务调度肯定不止node-cron一个库
常见的 Node.js 调度器有 Node-Schedule、Node-Cron、Agenda、Bree、Cron、Bull、Bottleneck
我们分别从npm的包的download流行度来接受下这些包的区别
Bottleneck
https://github.com/SGrondin/bottleneck
Bottleneck 是一款适用于 Node.js 和浏览器的轻量级零依赖任务调度器和速率限制器。
它是一种简单的解决方案,因为它几乎不会增加代码的复杂性。它是经过实战检验的、可靠的、生产就绪的,已在私营公司和开源软件中大规模使用。
从 NPM 下载量可以看到,Cron 是第一大常用的 Node.js 调度工具。它支持集群,可以在多个 Node.js 实例之间对作业进行速率限制。它使用 Redis 和严格的原子操作,在客户端和网络不可靠的情况下也能保持可靠。它还支持 Redis Cluster 和 Redis Sentinel。
大多数应用程序接口都有速率限制。例如,每秒处理三个请求:
const limiter = new Bottleneck({ minTime: 333 });
如果您希望阻止多个请求同时运行,并且某些请求的运行时间可能超过 333ms,请添加 maxConcurrent: 1:
const limiter = new Bottleneck({ maxConcurrent: 1, minTime: 333 });
Bottleneck 可创建任务队列并快速完成任务。默认情况下,任务通常会按照收到的顺序执行。
Cron
https://github.com/kelektiv/node-cron
Cron 是一款功能强大的工具,可根据使用 cron 语法定义的时间表运行作业(函数或命令)。它非常适合数据备份、通知等任务。但使用时需要注意的是,Cron 和 前面《通过node-cron实现nodejs实现定时任务/调度》介绍的 Node-cron 的 GitHub 仓库名称都是 node-cron,仅仅是 npm 包名不同。
从 NPM 下载量可以看到,Cron 是第二大常用的 Node.js 调度工具,拥有 8k Github star,在当前最新版本为 3.1.6 之前,已经发布了 60 个版本。
tar,在当前最新版本为 3.1.6 之前,已经发布了 60 个版本。
主要特性如下:
在计划任务触发时执行函数
使用 child_process 执行 javascript 进程外部的任务(如系统命令
使用日期或 Luxon DateTime 对象(而非 cron 语法)作为回调触发器
使用额外的秒槽(不使用时默认为 0,与 Unix 行为一致)
其是,使用上,和node-cron是差不多的,具体如何,暂时没意细究!
node-schedule
https://github.com/kibertoad/toad-scheduler
node-schedule 是一款适用于 Node.js 的多功能作业调度程序,其工作方式既像 cron,又不像 cron。通过可配置的递归标准,它能让你安排作业(任意函数)在特定日期执行。它不会每秒或每分钟评估即将到来的作业,每次只使用一个计时器。node-schedule 不使用基于时间间隔的调度,而是使用基于时间的调度。
根据 npm 下载量,它是第三大最常用的 Node 调度工具。
尽管 node-schedule 也可以灵活使用,但它主要用于基于时间的调度,而不是基于间隔的调度。
node-schedule 中使用基于日期的调度和基于 cron 表达式的调度。当使用基于 cron 表达式的调度时,您可以传递一个 cron 表达式,并使用 cron-parser 解析它来指示何时触发作业:
const nodeSchedule = require('node-schedule'); const job = nodeSchedule.scheduleJob('* * * * *', function() { console.log('Job has been triggered at: ', new Date.toLocaleTimeString()); });
与大多数 Node.js 调度程序一样,node-schedule 有一个限制,即只有在脚本处于活动状态时才会触发作业。如果您想安排一个在脚本不活动时仍然继续执行的作业,请考虑使用 Cron。同样,如果您希望在重启之间保留作业,这可能不是一个好的选择。
Bull
Bull 是 Node.js 的队列系统,它使用必须运行 Redis 服务器。如果不想使用 Redis,就只能使用其他调度程序。如果你不想在系统上安装 Redis,也可以使用与 Bull 完美集成的 Redis 托管服务。
作为屌丝的我,选择放弃!
Bree
Bree 是 Node.js 和 JavaScript 的最佳作业调度程序,支持 cron、日期、毫秒、稍后和人性化功能,在Node 和浏览器都可用于运行它。
与上面提到的其他调度程序相比,这个软件包相当新,迭代也比较频繁
转载本站文章《Node.js 常见调度器:》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/JS-Server/9317.html