Lịch NodeJS

Lên lịch công việc là quá trình bắt đầu một công việc, nhiệm vụ hoặc chức năng tại một thời điểm cụ thể hoặc khi các sự kiện cụ thể diễn ra. Cron, bộ lập lịch công việc dựa trên thời gian được sử dụng trong các hệ thống giống Unix, là cơ sở cho phần lớn các bộ lập lịch công việc

Nhiều bộ lập lịch công việc có sẵn cho Node. môi trường thời gian chạy js. Trong khi một số bộ lập lịch này hoạt động trong cả trình duyệt và Node, những bộ lập lịch khác chỉ hoạt động trong Node. Chọn bộ lập lịch trình tốt nhất cho trường hợp sử dụng của bạn có thể khó khăn và tốn thời gian vì mỗi bộ lập lịch này có các đặc điểm riêng

Chúng tôi sẽ hướng dẫn bạn qua Nút phổ biến nhất. js trong bài viết này, làm nổi bật các đặc điểm quan trọng, sự khác biệt và điểm tương đồng của chúng. Chúng tôi sẽ làm nổi bật các số liệu và thông tin hữu ích, chẳng hạn như kích thước gói, số sao GitHub, số lượng phát hành, số lượt tải xuống npm, giấy phép gói, phụ thuộc và bảo trì, trong số những thứ khác, ngoài các tính năng và chức năng chính được cung cấp bởi mỗi gói

Đây là cách nó được thực hiện

#1 Lịch

Lịch NodeJS
Nguồn hình ảnh

Chương trình nghị sự cung cấp khả năng lên lịch công việc linh hoạt bằng cách sử dụng cron và cú pháp dễ tiếp cận hơn. Để sử dụng Lịch làm bộ lập lịch công việc, cơ sở dữ liệu MongoDB của bạn phải đang hoạt động

Tạo bộ chứa Docker hoặc sử dụng Atlas cơ sở dữ liệu đám mây của MongoDB để dùng thử bộ lập lịch này nếu bạn không muốn tải xuống và cài đặt MongoDB trên hệ thống của mình. Nếu bạn không muốn sử dụng MongoDB, gói này có lẽ không phải là lựa chọn khả thi cho bạn

Lịch NodeJS
Nguồn hình ảnh

Tôi đã xác định một công việc đơn giản đăng nhập vào bảng điều khiển mỗi phút một lần trong đoạn mã bên dưới

const mongoConnectionString = "mongodb://127.0.0.1/agenda";
const agenda = new Agenda({
    db: {
        address: mongoConnectionString
    }
});

agenda.define("Delete old users", async (job) => {
    await User.remove({
        lastLogIn: {
            $lt: twoDaysAgo
        }
    });
});
(async function() {
    // IIFE to give access to async/await
    await agenda.start();
    await agenda.every("3 minutes", "Delete old users");

    // Alternatively, you could also do:
    await agenda.every("*/3 * * * *", "Delete old users");
})();

Agenda là một bộ lập lịch Node được MIT cấp phép. Nó được phát hành lần đầu cách đây tám năm; . 3. 0. Nó có 8. 5k sao GitHub và 90.562 npm lượt tải xuống hàng tuần

Chương trình nghị sự là một gói khá phức tạp, đặc biệt là với số lượng phát hành. Nó có rất nhiều tính năng, nhưng nó cũng có rất nhiều phụ thuộc. Lịch có kích thước cài đặt là 18. 8 MB và kích thước gói xuất bản là 339. 4KB

#2 Lịch trình nút

Lịch NodeJS
Nguồn hình ảnh

Node Schedule là một công cụ lập lịch công việc linh hoạt cho Node. js hoạt động cả giống và không giống cron. Với tiêu chí lặp lại có thể định cấu hình, nó cho phép bạn lên lịch công việc (chức năng tùy ý) để thực hiện vào những ngày cụ thể. Nó không đánh giá các công việc sắp tới mỗi giây hoặc mỗi phút, chỉ sử dụng một bộ đếm thời gian tại một thời điểm. Thay vì sử dụng lập lịch dựa trên khoảng thời gian, Lịch biểu nút sử dụng lập lịch dựa trên thời gian

Đây là một công cụ nguồn mở được MIT cấp phép khác cho Node. lập lịch công việc js. Theo số lượt tải xuống trên npm, đây là bộ lập lịch Node được sử dụng nhiều thứ hai. Node-schedule đã có rất nhiều cơ hội để thích nghi và phát triển trong những năm qua, với 44 phiên bản được sản xuất trước phiên bản 2 hiện tại. 1. 0

Lịch NodeJS
Nguồn hình ảnh

Mặc dù nó cũng có thể được sử dụng linh hoạt, nhưng Node-schedule chủ yếu dành cho lập lịch dựa trên thời gian thay vì lập lịch dựa trên khoảng thời gian. Bạn có thể nhanh chóng lên lịch một công việc để chạy vào những ngày cụ thể với sự trợ giúp của Node-schedule, cũng cung cấp cấu hình định kỳ tùy chọn

Bạn có thể lựa chọn sử dụng lập lịch dựa trên ngày và lập lịch theo kiểu cron với lịch trình Node. Khi sử dụng lập lịch kiểu cron, bạn có thể chuyển một biểu thức cron và có trình phân tích cú pháp cron phân tích cú pháp để cho biết khi nào công việc được kích hoạt

const nodeSchedule = require('node-schedule');

const job = nodeSchedule.scheduleJob('* * * * *', function() {
    console.log('Job has been triggered at: ', new Date.toLocaleTimeString());
})

Ngược lại, lập lịch dựa trên ngày cho phép bạn chuyển một đối tượng ngày JavaScript thực để xác định ngày thực hiện cụ thể của công việc. Ngoài ra, nó cung cấp lựa chọn liên kết dữ liệu hiện tại để sử dụng trong tương lai

Giống như hầu hết các bộ lập lịch Node, Node-schedule có một hạn chế là công việc sẽ chỉ được kích hoạt khi tập lệnh đang hoạt động. Cân nhắc sử dụng Cron nếu bạn muốn lên lịch một công việc sẽ tiếp tục thực thi ngay cả khi không có tập lệnh. Tương tự, nếu bạn muốn tiếp tục công việc giữa các lần khởi động lại, thì đó không phải là một giải pháp thay thế tốt

Lịch trình nút có kích thước cài đặt là 3. 15 MB và kích thước xuất bản là 33. 2KB sau khi chạy qua Packagephobia

# 3 Nút Cron

Lịch NodeJS
Nguồn hình ảnh

Gói nguồn mở, được cấp phép ISC là nút cron. Một bộ lập lịch Node đã được thiết lập, đáng tin cậy và đã được thử nghiệm khác là Node-cron, được phát hành lần đầu cách đây sáu năm. Vào npm, phiên bản mới nhất, 3. 0. 2, nhận được khoảng 355.569 lượt tải xuống mỗi tuần

Lịch NodeJS
Nguồn hình ảnh

Mô-đun nút-cron là một công cụ lập lịch công việc dựa trên crontab GNU nhỏ dành cho nút. js được viết hoàn toàn bằng JavaScript. Mô-đun này cho phép lập lịch công việc theo cú pháp crontab hoàn chỉnh trong nút. js. Node-cron có thể được lập trình để bắt đầu công việc vào những thời điểm định trước hoặc định kỳ

_______2_______

Node-cron bao gồm các phương thức để xác thực các biểu thức cron và bắt đầu, tạm dừng và kết thúc các công việc đã lên lịch ngoài phương thức lịch trình để lên lịch cho một công việc

Node-cron sẽ hữu ích nếu bạn cần lên lịch một công việc đơn giản trong Node hoặc phía máy chủ, nhưng nó sẽ không được sử dụng nhiều nếu bạn cũng cần một bộ lập lịch hỗ trợ worker thread hoặc chạy trong trình duyệt

Chỉ có một phụ thuộc cấp một cho Node-cron. Theo Packagephobia, kích thước xuất bản và cài đặt cho Node-cron là 65. 6KB và 5. 26 MB, tương ứng

#4 Bree

Lịch NodeJS
Nguồn hình ảnh

Bree là một công cụ lập lịch công việc JavaScript khác được MIT cấp phép. Cả Node và trình duyệt đều được sử dụng để chạy nó

So với các lịch trình khác được đề cập ở trên, gói này khá mới. Kể từ khi nó được phát hành lần đầu tiên cách đây khoảng 9 tháng, đã có khoảng 72 ấn phẩm về nó. Vào npm, phiên bản mới nhất, 9. 1. 2, nhận được khoảng 21.417 lượt tải xuống mỗi tuần

Lịch NodeJS
Nguồn hình ảnh

Bree, công cụ lên lịch mới nhất, cung cấp nhiều tính năng hơn đáng kể so với hầu hết các đối thủ cạnh tranh và là công cụ duy nhất hoạt động với Node và trình duyệt. Theo tài liệu, Bree tạo ra các quy trình trong hộp cát bằng cách sử dụng các chuỗi worker trong Node và web worker trong trình duyệt

Nó hỗ trợ điều tiết, hoạt động chạy dài, đồng thời, v.v. Để xem danh sách đầy đủ các tính năng, hãy đọc tài liệu

Bạn có thể sử dụng Bree để lập kế hoạch cho một công việc đơn giản bằng cách xem đoạn mã dưới đây. Các chức năng cạo dữ liệu. js, sao lưu cơ sở dữ liệu. js và gửi email. js được liệt kê trong thư mục công việc tại thư mục gốc của dự án

const Bree = require('bree');

const jobs = [{
        name: 'scrape-data',
        interval: 'every 1 minute'
    },
    {
        name: 'backup-database',
        timeout: 'at 12:00 am'
    },
    {
        name: 'send-email',
        timeout: '1m',
        interval: '5m'
    }
];

const bree = new Bree({
    jobs
});
bree.start();

Có 18 phụ thuộc cấp một trên gói này. Sau khi chạy qua Packagephobia, kích thước xuất bản là 1. 38 MB và kích thước cài đặt là 5. 64MB

Tương tự, sau khi chạy gói thông qua Bundlephobia, kích thước gói được nén và rút gọn của Bree là 64. 3KB nếu bạn đang xem xét thực thi nó ở phía máy khách

#5 Cron

Lịch NodeJS
Nguồn hình ảnh

Hãy cẩn thận để không trộn bộ lập lịch Node được cấp phép MIT này với Node-cron. Tên kho lưu trữ GitHub cho cả Cron và Node-cron là node-cron. Bạn có thể cho rằng cái này là nhánh của cái kia nếu bạn tìm kiếm GitHub

Kể từ lần phát hành đầu tiên cách đây 10 năm, 40 phiên bản của gói này đã được phát hành. Trình lập lịch trình Node có nhiều lượt tải xuống nhất trong số những thứ được đề cập ở đây, với 1.243.355 lượt tải xuống hàng tuần kể từ phiên bản 2. 1. 0 và lượt tải xuống cao nhất

Cú pháp crontab, "* * * * *," có thể được sử dụng để lập kế hoạch khi một công việc sẽ được thực thi. Biểu thức thêm tùy chọn giây, mở rộng mẫu Unix. Tùy chọn giây mặc định bằng 0 nếu nó không được cung cấp

Ngoài ra, nó cung cấp tùy chọn cung cấp đối tượng ngày tháng thay vì biểu thức cron. Chức năng của Cron khá giống với Nodecron

const {
    CronJob
} = require('cron');

const job = new CronJob('* * * * * *', function() {
    console.log('This job is triggered each second!');
});
job.start();

Ngoài 1.701 phụ thuộc khác, Cron có một phụ thuộc cấp độ đầu tiên vào npm. Các phụ thuộc cho Cron và Node-cron giống nhau

Kích thước cài đặt của nó là 5. 25 MB và kích thước xuất bản của nó là 69. 3KB. Như bạn có thể thấy, kích thước xuất bản chỉ là 3. Lớn hơn 7KB so với Nodecron

#6 Bò đực

Lịch NodeJS
Nguồn hình ảnh

Bull là một hệ thống xếp hàng cho Node sử dụng máy chủ Redis phải đang chạy. Bạn sẽ phải làm với các bộ lập lịch khác nếu không muốn sử dụng Redis. Nếu cài đặt Redis trên hệ thống của bạn không phải là điều bạn muốn làm, thì có các dịch vụ lưu trữ Redis tích hợp tốt với Bull

Lịch NodeJS
Nguồn hình ảnh

Bull tự hào về hệ thống xếp hàng dựa trên Redis nhanh nhất và đáng tin cậy nhất cho môi trường thời gian chạy Node. Gói được MIT cấp phép này có 421.580 lượt tải xuống hàng tuần và đã được xuất bản cách đây 9 năm. Thực tế là nó hiện đang ở phiên bản 4. 10. 0 cho thấy nó trưởng thành và đáng tin cậy như thế nào

Trong số những thứ khác, Bull cung cấp lập lịch công việc dựa trên cú pháp cron, giới hạn tỷ lệ công việc, đồng thời, chạy nhiều công việc trên mỗi hàng đợi, thử lại và ưu tiên công việc. Bạn có thể xem tài liệu để biết danh sách đầy đủ các tính năng

Với cấu hình Redis mặc định, ví dụ đơn giản bên dưới sẽ viết " Hello World. "đến thiết bị đầu cuối sau năm giây

const Queue = require('bull');

const helloWorldQueue = new Queue('hello-world-queue');
const data = {
    someData: 'Hello World!'
};
const options = {
    delay: 5000,
    attempts: 3
};

helloWorldQueue.add(data, options);
helloWorldQueue.process((job) => {
    console.log(job.data.someData);
});

Có 10 phụ thuộc cấp một trên gói này. Gói có kích thước cài đặt là 9. 14MB và kích thước xuất bản là 170KB

#7 Cổ chai

Lịch NodeJS
Nguồn hình ảnh

Nút cổ chai là bộ giới hạn tốc độ và bộ lập lịch công việc cho Node. js và một trình duyệt nhỏ và độc lập. Vào npm, phiên bản mới nhất, 2. 19. 5, nhận được khoảng 1.500.861 lượt tải xuống mỗi tuần

Vì nút cổ chai thêm rất ít độ phức tạp vào mã của bạn nên đó là một giải pháp đơn giản. Nó được sử dụng rộng rãi bởi các doanh nghiệp tư nhân và phần mềm mã nguồn mở và đã được thử nghiệm trong trận chiến, đáng tin cậy và sẵn sàng sản xuất

Nó có khả năng thực hiện các công việc giới hạn tỷ lệ trên một số Nút. js và cho phép phân cụm. Để duy trì độ tin cậy khi có các máy khách và mạng không ổn định, nó sử dụng Redis và các hoạt động nguyên tử nghiêm ngặt. Redis Cluster và Redis Sentinel cũng được hỗ trợ

Phần lớn các API có giới hạn tốc độ. Chẳng hạn, để xử lý ba yêu cầu mỗi giây

const limiter = new Bottleneck({
    minTime: 333
});

Nếu bạn muốn dừng chạy nhiều yêu cầu cùng một lúc và có khả năng một số yêu cầu nhất định có thể mất nhiều thời gian hơn 333 mili giây, hãy thêm maxConcurrent. 1

const limiter = new Bottleneck({
    maxConcurrent: 1,
    minTime: 333
});

Nút cổ chai tạo ra một hàng nhiệm vụ và hoàn thành chúng một cách nhanh chóng. Các công việc thường sẽ được thực hiện theo thứ tự mà chúng được nhận theo mặc định

#8 Tân kế hoạch

Lịch NodeJS
Nguồn hình ảnh

Neoplan là một Nút đơn giản, lấy cảm hứng từ Lịch. bộ lập lịch công việc js được xây dựng trên MongoDB. Trên npm, phiên bản mới nhất, 1. 2. 1, nhận được khoảng 7 lượt tải xuống mỗi tuần

Neoplan khác với Agenda ở một số điểm, bao gồm thực tế là nó không có nhiều tính năng và cho phép bạn lên lịch các tác vụ có cùng tên nhưng giá trị đầu vào khác nhau

Neoplan là một ví dụ về cấu trúc điều khiển đơn giản. Các công việc được tải vào Neoplans bằng cách ánh xạ chúng tới bộ sưu tập cơ sở dữ liệu

________số 8_______

Neoplan phải được bắt đầu để nó bắt đầu xử lý các công việc từ cơ sở dữ liệu. Điều này sẽ thiết lập kiểm tra các công việc mới và khoảng thời gian chạy (tùy thuộc vào processEvery). Dòng cũng có thể được dừng lại

Đôi khi, nhiều phiên bản nút hoặc máy xử lý từ cùng một hàng đợi có thể được mong muốn. Neoplan có tính năng khóa để ngăn không cho cùng một công việc được xử lý bởi các hàng đợi khác nhau

Không có giao diện web tích hợp cho Neoplan. Tuy nhiên, neoplan-UI là một giao diện web độc lập có sẵn

Bản tóm tắt

Hệ sinh thái gói Node cung cấp nhiều bộ lập lịch công việc để người dùng lựa chọn. Sự lựa chọn của bạn về một bộ lập lịch sẽ chủ yếu phụ thuộc vào yêu cầu của bạn vì phần lớn các gói chứa các tính năng sẽ đáp ứng nhu cầu lập lịch công việc cơ bản của bạn

Nếu bạn muốn thực hiện lập lịch trình công việc đơn giản và dễ dàng ở phía máy chủ, Cron, Node-cron và Node-schedule có thể đáng để xem xét vì chúng đơn giản, được thiết lập tốt, phổ biến, phụ thuộc và có giấy phép phù hợp. Đối với các nhiệm vụ dễ dàng, chúng tôi khuyên bạn nên sử dụng một trong ba

Cả Agenda và Bull đều cung cấp tính năng lập lịch công việc đơn giản, nhưng có thêm các khả năng và hỗ trợ để duy trì cơ sở dữ liệu. Nếu bạn không định sử dụng chức năng bổ sung mà các gói và phần phụ thuộc đó cung cấp, thì bạn sẽ không muốn chúng trong ứng dụng của mình

Mặt khác, Bree có thể là lựa chọn tốt nhất của bạn nếu bạn đang tìm kiếm một công cụ lập lịch trình có các tính năng bổ sung như hỗ trợ chuỗi công việc hoặc khả năng chạy trong cả trình duyệt và Node (ngoài tính năng lập lịch trình công việc cơ bản)


Giám sát nút của bạn. js với Atatus

Atatus theo dõi Node của bạn. js để cung cấp cho bạn bức tranh hoàn chỉnh về trải nghiệm người dùng cuối của khách hàng của bạn. Bạn có thể xác định nguồn gốc của thời gian phản hồi chậm trễ, truy vấn cơ sở dữ liệu và các vấn đề khác bằng cách xác định các tắc nghẽn hiệu suất phụ trợ cho từng yêu cầu API

Lịch NodeJS

Để giúp việc sửa lỗi dễ dàng hơn, mọi Nút. js được ghi lại bằng dấu vết ngăn xếp đầy đủ và dòng mã nguồn cụ thể được đánh dấu. Để hỗ trợ bạn giải quyết Node. js, hãy xem các hoạt động của người dùng, nhật ký bảng điều khiển và tất cả các Nút. js yêu cầu xảy ra tại thời điểm này. Cảnh báo lỗi và ngoại lệ có thể được gửi qua email, Slack, PagerDuty hoặc webhooks