جميع المقالات

قوائم المهام والتخزين المؤقت في تطبيقات Laravel الإنتاجية

انقل الأعمال البطيئة خارج الطلب، وخزّن ما يتكرر قراءته، واجعل إعادة المهام آمنة. دليل عملي للحفاظ على سرعة تطبيق Laravel في بيئة الإنتاج.

بقلم أمير نصارقراءة 4 دقائق
المحتويات

قد يكون تطبيق Laravel سريعًا أثناء التطوير ثم يتباطأ مع المستخدمين والبيانات والتكاملات الحقيقية. غالبًا ما يحدث ذلك لأن أعمالًا كثيرة تُنفذ بينما ينتظر المستخدم. تساعد قوائم المهام والتخزين المؤقت والمهام المجدولة إذا استُخدمت بعناية؛ وهذه ممارسات نعتمدها في الإنتاج.

انقل الأعمال البطيئة خارج الطلب

ينبغي لطلب الويب تنفيذ الحد الأدنى اللازم للرد. أما ما يتصل بخدمة أخرى أو ينشئ ملفًا أو يرسل رسائل عديدة فيمكن غالبًا تشغيله بالخلفية. من الأمثلة:

  • إرسال البريد والرسائل القصيرة وWhatsApp.
  • إنشاء ملفات PDF والفواتير وعمليات التصدير.
  • استدعاء APIs الدفع والشحن والضرائب حين لا يحتاج المستخدم النتيجة فورًا.
  • تغيير حجم الصور ومعالجة الملفات المرفوعة.
  • مزامنة البيانات مع البحث أو جداول التقارير.

ترسل منظومة قوائم Laravel المهمة إلى المخزن المهيأ، ثم يعالجها عامل بالخلفية. يحصل المستخدم على استجابة سريعة ويكتمل العمل بعدها بوقت قصير.

اكتب مهامًا آمنة عند إعادة المحاولة

قد تفشل المهام بسبب انقطاع الشبكة أو انتهاء مهلة API خارجي أو إعادة تشغيل العامل أثناء النشر. افترض أن المهمة قد تنفذ أكثر من مرة وصمم على هذا الأساس.

اجعل المهام idempotent

لا ينبغي لتكرار المهمة أن يخصم المبلغ مرتين أو يرسل الرسالة نفسها مرتين. تحقق من إنجاز العمل سابقًا، واستخدم مرجعًا فريدًا للاتصال الخارجي، واجعل قيود قاعدة البيانات خط دفاع أخيرًا.

اضبط المهلة والمحاولات والتراجع

حدد لكل مهمة مهلة معقولة وعدد محاولات محدودًا وفاصلًا متزايدًا بينها. التكرار بلا نهاية مع خدمة معطلة يزيد الضغط ولا يحل المشكلة.

public int $tries = 3;
public int $timeout = 60;

public function backoff(): array
{
    return [30, 120, 600];
}

مرر المعرّفات لا النماذج كاملة

احمل في المهمة أقل قدر من البيانات. يخزن Laravel معرّف نموذج Eloquent ويعيد تحميله عند التنفيذ، فيبقى الحمْل صغيرًا والبيانات حديثة. عند التأخير الطويل تحقق من بقاء السجل ومن حالته المتوقعة.

افصل القوائم بحسب الأولوية

لا تضع رسائل إعادة تعيين كلمة المرور خلف حملة تسويقية ضخمة. افصل الأعمال العاجلة والاعتيادية والمجمعة، وشغل عمالًا تفضّل العاجل. يبقي مدير عمليات مثل Supervisor العمال قيد التشغيل، وتضمن إعادة التشغيل السلسة بعد النشر تحميل الشيفرة الجديدة.

خزّن ما يقرأ كثيرًا ويتغير نادرًا

الإعدادات والتنقل والصفحات العامة واستعلامات التقارير المكلفة وفحوص الصلاحيات مرشحة جيدة. استخدم Cache::remember() بمفتاح مفهوم ومدة مناسبة.

خطط للإبطال أولًا

التحدي هو معرفة متى تصبح القيمة قديمة. حدّث الذاكرة في المسار نفسه الذي يغير البيانات، أو استخدم مدة قصيرة حين يكون التقادم البسيط مقبولًا. تسهّل الوسوم والبادئات الواضحة حذف مجموعة من القيم معًا.

لا تضع بيانات مستخدم في مفتاح مشترك

في أنظمة تعدد المستخدمين والمستأجرين، أدرج معرف المستخدم أو المستأجر في المفتاح. نسيان ذلك قد يعرض بيانات عميل لآخر.

اختر مخزنًا ملائمًا

يكفي الملف أو قاعدة البيانات للمواقع الصغيرة. أما التطبيقات الأكثر نشاطًا فيناسبها Redis لسرعة القراءة والأقفال الذرية ودعم القوائم. تستخدم منصة نارمار إكسبريس للشحن Redis مع Laravel وInertia لهذا النوع من الأحمال.

استخدم المجدول للأعمال المتكررة

يجمع مجدول Laravel مهام cron في أمر واحد يعمل كل دقيقة ويحدد ما حان موعده، مثل التقارير والتنظيف والتذكيرات والمزامنة. امنع تداخل المهام الطويلة وشغل الأعمال الثقيلة على خادم واحد عند التوسع الأفقي.

راقب ما لا تراه

قد تفشل الأعمال الخلفية بصمت ما لم تراقبها. جهز بعد الإطلاق:

  1. تنبيهات للمهام الفاشلة عبر جدول الإخفاق وإشعار للفريق.
  2. مراقبة طول القوائم ووقت الانتظار لرصد التراكم مبكرًا.
  3. سجلات تحمل معرّف الطلب أو المهمة لتتبع المشكلة من بدايتها.
  4. مراجعة دورية للاستعلامات البطيئة، فالتخزين المؤقت لا يعوض فهرسًا مفقودًا.

لا تهمل الأساسيات

قبل إضافة بنية تحتية، عالج الواضح: حمّل العلاقات مسبقًا لتجنب تكرار الاستعلام، وأضف فهارس لأعمدة التصفية والترتيب، وقسّم القوائم الكبيرة إلى صفحات. قد تحقق هذه التغييرات أكثر من طبقة تخزين جديدة.

إذا بدأ تطبيق Laravel بالتباطؤ مع نموه، يستطيع مهندسونا مراجعته واقتراح إصلاحات محددة. اطلع على خدماتنا أو تواصل مع فريق نارمار.

شارك المقال

تخطط لمشروع مشابه؟

حدّثنا عن مشروعك، وسنعود إليك خلال يوم عمل واحد بالخطوات التالية وتقدير واقعي للتكلفة.

تحدّث مع مهندسينا

استلم مقالنا القادم في بريدك الإلكتروني

خلاصات عملية حول البرمجيات وAI وأنظمة ERP للشركات في مرحلة النمو. بلا رسائل مزعجة، ويمكنك إلغاء الاشتراك بنقرة واحدة.

  • Laravel
  • Inertia
  • React

لوحات معلومات فورية باستخدام Inertia وReact في Laravel

تبدو لوحة المعلومات حية عندما تتحدث البيانات المناسبة في الوقت المناسب. قارن إعادة التحميل الجزئي والاستطلاع والخصائص المؤجلة والبث في بنية Laravel وInertia وReact.

قراءة 5 دقائق