طوابير العمل (Queues) وتحسين أداء التطبيق

عندما يقوم المستخدم برفع صورة كبيرة أو إرسال بريد إلكتروني، قد يستغرق السيرفر عدة ثوانٍ للمعالجة، مما يجعل المستخدم ينتظر أمام صفحة بيضاء. هذا يؤدي لتجربة مستخدم سيئة. الحل هو **طوابير العمل (Queues)**. تتيح لك Queues تأجيل المهام الثقيلة (مثل إرسال البريد أو معالجة الفيديوهات) ليتم تنفيذها في الخلفية، بينما يحصل المستخدم على استجابة فورية بنجاح العملية.

1. إنشاء مهمة جديدة (Job)

المهمة (Job) هي كلاس يحتوي على الكود الذي تريد تنفيذه في الخلفية. لإنشاء مهمة لمعالجة الصور:

php artisan make:job ProcessImage

داخل هذا الكلاس، نضع الكود المخصص داخل وظيفة handle():

public function handle(): void
{
    // كود ثقيل لمعالجة الصورة وتصغير حجمها
}

2. إرسال المهمة للطابور (Dispatching)

لاستدعاء المهمة لتعمل في الخلفية من داخل المتحكم، نستخدم وظيفة dispatch():

use App\Jobs\ProcessImage;

public function store(Request $request)
{
    // ...
    ProcessImage::dispatch($image);

    return 'جاري معالجة الصورة في الخلفية...';
}

3. تشغيل معالج الطوابور (Queue Worker)

لكي يبدأ السيرفر في تنفيذ المهام الموجودة في الطابور، يجب تشغيل عملية مراقبة دائمة في سطر الأوامر:

php artisan queue:work
تنبيه: في بيئة الإنتاج، يجب استخدام أدوات مثل **Supervisor** للتأكد من أن معالج الطوابير يعمل دائماً ولا يتوقف أبداً حتى لو حدث خطأ.

أسئلة شائعة حول الطوابير

يمكنك تخزينها في قاعدة البيانات (جدول jobs)، ولكن الأفضل والأسرع جداً هو استخدام **Redis**. يمكنك تغيير ذلك من ملف .env عبر متغير QUEUE_CONNECTION.

يتيح لك لارافيل تحديد عدد محاولات إعادة التنفيذ تلقائياً. وإذا فشلت نهائياً، سيتم نقلها لجدول failed_jobs لتتمكن من مراجعة الخطأ وإعادة تشغيلها لاحقاً.
الدرس القادم

بناء واجهات API وتأمينها

هل تريد ربط تطبيقك بتطبيق موبايل؟ سنتعلم كيف نبني واجهات برمجة تطبيقات (API) احترافية وكيف نؤمنها باستخدام Laravel Sanctum.

تعلم بناء الـ API
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن