مجدول المهام بلغة TypeScript: دليل شامل لمكتبات cron والمؤقتات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مجدول المهام بلغة TypeScript: دليل شامل



مجدول المهام (task scheduler) هو أداة تسمح بتشغيل الدوال أو البرامج النصية في وقت محدد أو بوتيرة معينة. في نظام TypeScript البيئي، توجد عدة مكتبات ناضجة لتنفيذ مثل هذه السيناريوهات: من المؤقتات البسيطة إلى أنظمة cron القوية. في هذه المقالة، سنستعرض الأساليب الرئيسية ونوضح كيفية استخدامها في المشاريع الحقيقية.



لماذا نحتاج إلى مجدول المهام؟

أتمتة الإجراءات المتكررة هي مهمة أساسية لأي تطبيق خادم. السيناريوهات النموذجية:

  • إرسال إشعارات البريد الإلكتروني كل ساعة.
  • تنظيف الملفات المؤقتة كل ليلة.
  • جمع التحليلات في نهاية اليوم.
  • تحديث ذاكرة التخزين المؤقت وفقًا لجدول زمني.

في TypeScript (و JavaScript) توجد آلية أساسية مدمجة — setInterval و setTimeout، ولكن للجداول الزمنية المعقدة، من الأسهل استخدام مكتبات متخصصة.



الأدوات المدمجة: setInterval و setTimeout

أبسط طريقة هي استخدام الدوال العامة:

// مثال: التنفيذ كل 5 ثوانٍconst intervalId = setInterval(() => {  console.log('تم تنفيذ المهمة في', new Date().toISOString());}, 5000);

// الإيقاف بعد 30 ثانيةsetTimeout(() => { clearInterval(intervalId); console.log('تم إيقاف المجدول');}, 30000);

الإيجابيات: لا يتطلب تثبيت، يعمل في أي بيئة. السلبيات: لا يدعم تعبيرات cron، صعوبة إدارة المهام الفائتة.



مكتبة node-cron

واحدة من أشهر المكتبات لـ Node.js. تعمل بتنسيق cron الكلاسيكي (5 حقول): الدقائق، الساعات، يوم الشهر، الشهر، يوم الأسبوع.



التثبيت

npm install node-cronnpm install @types/node-cron


مثال على الاستخدام

import * as cron from 'node-cron';

// مهمة: كل دقيقةcron.schedule('* * * * *', () => { console.log('تشغيل كل دقيقة');});

// مهمة: كل يوم في الساعة 9:30 صباحًاcron.schedule('30 9 * * *', () => { console.log('مهمة يومية في 9:30');});

// مهمة: أيام العمل في الساعة 18:00cron.schedule('0 18 * * 1-5', () => { console.log('أيام العمل في 18:00');});


إدارة المهام

import * as cron from 'node-cron';

const task = cron.schedule('*/5 * * * *', () => { console.log('كل 5 دقائق');});

// إيقاف المهمةtask.stop();

// استئنافtask.start();

// التحقق من الحالةconsole.log(task.isActive()); // true أو false


مكتبة croner

بديل أكثر حداثة، مكتوب بلغة TypeScript من الصفر. يدعم بناء الجملة الموسع (الثواني، أسماء الأشهر) ويعمل في كل من Node.js والمتصفح.



التثبيت

npm install croner


مثال مع الثواني

import Cron from 'croner';

// كل 10 ثوانٍconst job = new Cron('*/10 * * * * *', () => { console.log('تشغيل كل 10 ثوانٍ');});

// مهمة: كل يوم اثنين في الساعة 8:30 صباحًاconst weeklyJob = new Cron('30 8 * * 1', () => { console.log('الاثنين، 8:30');});

// الإيقاف بعد دقيقة واحدةsetTimeout(() => { job.stop(); console.log('تم إيقاف المهمة');}, 60000);


الإمكانيات المتقدمة

import Cron from 'croner';

// مهمة مع اسم ومنطقة زمنيةconst job = new Cron('0 9 * * *', { name: 'morning-report', timezone: 'Europe/Moscow'}, () => { console.log('التقرير الصباحي بتوقيت موسكو');});

// الحصول على وقت التنفيذ التاليconst nextRun = job.nextRun();console.log('التشغيل التالي:', nextRun.toISOString());

// قائمة بجميع المهام النشطةconst activeJobs = Cron.getJobs();console.log('المهام النشطة:', activeJobs.length);


مقارنة بين node-cron و croner

  • node-cron — مكتبة مجربة عبر الزمن

توصيات