• home > webfront > ECMAS > nodejs >

    Node.js 常见调度器:

    Author:zhoulujun Date:

    上篇文章《通过node-cron实现nodejs实现定时任务 调度》讲过定时任务使用 systemd 和 cron的区别?以及nodejs如何通过node-cron实现任务

    上篇文章《通过node-cron实现nodejs实现定时任务/调度》讲过定时任务使用 systemd 和 cron的区别?以及nodejs如何通过node-cron实现任务调度。但是nodejs任务调度肯定不止node-cron一个库

    常见的 Node.js 调度器有 Node-Schedule、Node-Cron、Agenda、Bree、Cron、Bull、Bottleneck

    image.png

    我们分别从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