عند تنفيذ مهام بسيطة في الخلفية - كإرسال رسائل البريد الإلكتروني أو تحديث سجلات الدخول - يضطر المطورون عادةً إلى الاعتماد على قوائم انتظار خارجية مثل Redis أو SQS. لكن في الإصدار Laravel 12.35، قُدِمت ميزة Deferred Queue كحل مبتكر لتحسين الأداء. يكمن جوهر هذه الميزة في معالجة الوظائف المؤجلة مباشرة بعد إرسال استجابة HTTP، مما يضمن سرعة فورية للمستخدم.
الفكرة ببساطة:
يقوم Laravel بتأجيل تنفيذ بعض المهام إلى ما بعد إرسال استجابة HTTP إلى المستخدم.
لنتخيل السيناريو التالي:
الخطوة العاجلة: حفظ الطلب في قاعدة البيانات (يجب أن يتم فورًا).
الخطوة المؤجلة: إرسال بريد تأكيد الطلب للعميل (يمكن تنفيذه بعد لحظات).
في الوضع التقليدي، كان المستخدم ينتظر حتى يتم إرسال البريد الإلكتروني قبل أن يحصل على الرد.
أما مع Deferred Queue:
تُنفَّذ الخطوة العاجلة.
يُرسل الرد للمستخدم ("تمت عملية الشراء بنجاح ✅").
بعد إرسال الاستجابة، يبدأ Laravel في تنفيذ البريد المؤجل بالخلفية.
النتيجة: المستخدم يحصل على تجربة أسرع، وتُنفَّذ المهمة في الخلفية دون تعقيد.
1️⃣ الإعداد (خطوة واحدة)
في ملف config/queue.php أضف الاتصال الجديد:
'connections' => [ // ... 'deferred' => [ 'driver' => 'deferred', // هذا هو المفتاح! ], ],
2️⃣ إرسال المهمة (Job Dispatching)
في أي مكان داخل التطبيق:
RecordDelivery::dispatch($order)->onConnection('deferred');الشرح:
RecordDelivery::dispatch($order)
— مهمة تسجّل عملية تسليم الطلب.
->onConnection('deferred') — يخبر Laravel أن يُنفّذ المهمة بعد إرسال الاستجابة.
بعد إعداد الاتصال في config/queue.php وتحديده في .env،
دعنا نرى كيف يتغير تنفيذ المهام (Jobs) قبل وبعد استخدام ميزة Deferred Queue.
قبل إضافة Deferred Queue
في الوضع الافتراضي، يتم تنفيذ الـ Job عبر Default Queue Connection (مثل database أو sync):
RecordDelivery::dispatch($order);
في هذه الحالة، يتم إرسال الـ Job إلى نظام الانتظار المحدد في الإعدادات (مثلاً: QUEUE_CONNECTION=sync أو database).
يعني ذلك أن تنفيذ المهمة قد يحدث قبل أو أثناء إرسال HTTP Response —
أي أن المستخدم قد ينتظر حتى تنتهي المهمة.
بعد إضافة Deferred Queue
الآن، بعد تعريف Deferred Driver، يمكننا توجيه Laravel لتنفيذ نفس الـ Job
ولكن بعد إرسال الاستجابة للمستخدم مباشرة:
RecordDelivery::dispatch($order)->onConnection('deferred');التحليل:
الكود التنفيذ تجربة المستخدم
RecordDelivery::dispatch($order)
التنفيذ الفوري أو عبر Queue Worker المستخدم ينتظر زمن أطول
RecordDelivery::dispatch($order)->onConnection('deferred')التنفيذ بعد إرسال الـ HTTP Response في نفس الـ PHP Process
إرسال بريد ترحيبي
   (new SendWelcomeEmail($user))->onConnection('deferred')المستخدم لا ينتظر الاتصال بخادم البريد.
تسجيل تحليلات (Analytics)
Analytics::logAction()->onConnection('deferred')  يتم حفظ النشاط دون التأثير على سرعة التصفح.
إطلاق Webhooks بسيطة
(new SendWebhook($event))->onConnection('deferred')
إشعار الأنظمة الخارجية بعد أن يرى المستخدم تأكيد العملية.
المهام الطويلة أو الثقيلة
مثل معالجة فيديوهات، ضغط صور، أو استيراد ملفات ضخمة.
→ استخدم Redis أو Database Queue مع Workers بدلاً من ذلك.
المهام الحساسة التي تحتاج ضمان التنفيذ الكامل (Reliability)
لأنّ العملية المؤجلة تعتمد على نفس تنفيذ PHP؛
فإذا أُغلِقت العملية أو فشلت فجأة، قد لا تُنفَّذ المهمة.