في هذا الدرس 6تصفّح المواضيع
إن تكرار تشغيل الاستعلامات التجميعية المعقدة مع كل طلب زائر يفرض حملاً غير ضروري على قاعدة البيانات. تفحص الدالة Cache::remember وجود المفتاح في الذاكرة المؤقتة وتعيده فوراً، أو تنفذ دالة الإغلاق لتحميل البيانات وحفظها للمدة الزمنية المحددة قبل إرجاعها.
- القراءة مع التخزين (Read-Through Caching): تدمج دالة Cache::remember الفحص والاستعلام والحفظ في استدعاء واحد أنيق.
- التخزين الافتراضي بالقاعدة (Default Database Cache): يستخدم Laravel 12 جدول cache افتراضياً ويدعم Redis أو Memcached في الإنتاج.
- الحفظ المباشر بدالة put (Direct Storage with put): استخدم الدالة Cache::put لحفظ قيمة جاهزة مع تحديد وقت انتهاء الصلاحية.
use App\Models\Post;
use Illuminate\Support\Facades\Cache;
$top = Cache::remember('posts.top', 3600, function () {
return Post::where('views', '>', 99)->get();
});
يتطلب تقديم البيانات المخزنة مؤقتاً استراتيجية إبطال واضحة لكي لا يرى المستخدمون بيانات قديمة بعد تعديل السجلات أو حذفها. يقوم استدعاء الدالة Cache::forget بمسح المفتاح المحدد فوراً، مما يضمن قيام الطلب التالي بجلب البيانات المحدثة داخل دالة Cache::remember.
- الحذف الصريح للمفتاح (Explicit Key Eviction): استدع دالة Cache::forget داخل إجراءات الإنشاء والتحديث والحذف فور تغير البيانات الأساسية.
- الجلب والحذف معاً (Atomic Retrieve & Delete): استخدم دالة Cache::pull لقراءة القيمة المخزنة مرة واحدة وحذفها من الكاش في نفس اللحظة.
- التحديث المرن (Flexible Cache SWR): يوفر Laravel 12 أيضاً دالة Cache::flexible لتحديث الكاش في الخلفية دون تأخير الزائر.
public function update(Request $request, Post $post)
{
$post->update($request->only('title'));
Cache::forget('posts.top');
Cache::put("posts.{$post->id}", $post, 1800);
return response()->json($post);
}
مع نمو التطبيق، فإن وضع إرسال الإشعارات وتحديث الإحصائيات ومسح الكاش مباشرة داخل دالة المتحكم يجعل الكود معقداً وصعب الصيانة. يتيح توليد كلاس حدث عبر الأمر php artisan make:event الإعلان عن وقوع حدث في النظام مثل OrderPlaced لتتولى المستمعات المستقلة معالجته.
- حاوية بيانات الحدث (Domain Data Container): يحمل كلاس الحدث نسخة النموذج المرتبط بالعملية داخل خاصية عامة في دالة الباني.
- المعمارية المفصولة (Decoupled Architecture): ينجز المتحكم العملية الأساسية ثم يطلق الحدث عبر OrderPlaced::dispatch.
- وحدة المسؤولية (Single Responsibility): يمكنك إضافة مهام جانبية جديدة لاحقاً بإنشاء مستمعات إضافية دون لمس كود المتحكم.
namespace App\Events;
use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderPlaced {
use Dispatchable, SerializesModels;
}
ولّد كلاس المستمع عبر الأمر php artisan make:listener مع تحديد الحدث، ومرر التلميح النوعي لكلاس الحدث OrderPlaced داخل دالة handle. في Laravel 11 و 12، يقوم نظام الاكتشاف التلقائي بفحص مجلد app/Listeners وتسجيل أي مستمع يحدد نوع الحدث في دالة handle تلقائياً.
- الاكتشاف التلقائي للأحداث (Automatic Event Discovery): لا حاجة لتسجيل المستمع يدوياً في مزود الخدمة طالما وُجد التلميح النوعي للحدث في دالة handle.
- جدولة المستمعات في الطابور (Queued Listeners): أضف implements ShouldQueue لكلاس المستمع لتنفيذ المهام الجانبية البطيئة في الخلفية.
- تعدد المستمعات للحدث (Multiple Listeners per Event): يمكن لعدة كلاسات مستمعات مستقلة الاستجابة لنفس الحدث فور إطلاقه.
namespace App\Listeners;
use App\Events\OrderPlaced;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendOrderNotification implements ShouldQueue {
public function handle(OrderPlaced $event): void {}
}
بدلاً من إدارة عشرات الأسطر المنفصلة في جدول cron على خادم Linux، يتيح مجدول المهام في Laravel تعريف جميع المهام الدورية بسلاسة داخل ملف routes/console.php. يكفي ضبط وظيفة cron واحدة على الخادم تشغل الأمر php artisan schedule:run كل دقيقة لتنفيذ المهام المستحقة في وقتها.
- واجهة Schedule السلسة (Fluent Schedule Facade): عرّف الأوامر والمهام الدورية عبر Schedule::command أو Schedule::job داخل ملف routes/console.php.
- دوال التكرار المعبرة (Expressive Frequencies): اربط دوال التوقيت الواضحة مثل hourly و daily و dailyAt لتحديد مواعيد التنفيذ.
- منع تداخل المهام (Overlap Prevention): اربط دالة withoutOverlapping لضمان عدم بدء نسخة ثانية من المهمة إذا كانت النسخة السابقة لا تزال قيد التنفيذ.
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('sanctum:prune-expired --hours=24')
->dailyAt('03:00')
->withoutOverlapping();
يشكل التخزين المؤقت والأحداث وجدولة المهام العمود الفقري لمعمارية خلفية سريعة ومؤتمتة في Laravel 12. اجمع بين دالة Cache::remember لتسريع القراءة، وثنائية الأحداث والمستمعات لفصل المهام الجانبية، وواجهة Schedule::command لأتمتة الصيانة الدورية.
| وجه المقارنة الهندسي | الأسلوب المتزامن أو التقليدي | معيار Laravel 12 الحديث |
|---|---|---|
| الاستعلامات الثقيلة المتكررة | تشغيل استعلامات التجميع المعقدة في قاعدة البيانات مع كل زيارة | استخدام Cache::remember مع إبطال المفتاح بدقة عبر Cache::forget |
| المهام الجانبية بعد العمليات | تكديس إرسال البريد وتحديث الإحصائيات داخل دالة المتحكم | إطلاق كلاس Event ومعالجته عبر كلاسات Listeners مفصولة |
| تسجيل المستمعات | ربط مصفوفات الأحداث والمستمعات يدوياً داخل مزودات الخدمة | الاكتشاف التلقائي للمستمعات عبر التلميح النوعي في دالة handle |
| المهام الدورية على الخادم | كتابة عشرات الأسطر المتفرقة يدوياً في ملف crontab على الخادم | جدولة مركزية موثقة بالكود عبر Schedule::command في routes/console.php |
// Inspect scheduled tasks:
// php artisan schedule:list
// Run due scheduled tasks once:
// php artisan schedule:run
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «التخزين المؤقت والأحداث والمستمعون وجدولة المهام في Laravel» مفاهيم تخزين الاستعلامات المكلفة عبر Cache، وإبطال وتحديث مفاتيح التخزين المؤقت، وإطلاق أحداث التطبيق المخصصة Events وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «معالجة الاستثناءات وقنوات التسجيل وتعدد اللغات في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Cache Events التخبئة والجدولة
- تسريع الأداء بالتخزين المؤقت Cache::remember وفصل منطق التطبيق عبر الأحداث والمستمعين وجدولة المهام الدورية آلياً.
- للمراجعة
- 02 Caching Expensive Database Queries تخزين الاستعلامات المكلفة عبر Cache
- المفهوم الهندسي والتطبيق العملي المباشر لقسم تخزين الاستعلامات المكلفة عبر Cache في إطار العمل Laravel 12.
- للمراجعة
- 03 Invalidating Stale Cache Keys إبطال وتحديث مفاتيح التخزين المؤقت
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إبطال وتحديث مفاتيح التخزين المؤقت في إطار العمل Laravel 12.
- للمراجعة
- 04 Dispatching Custom Application Events إطلاق أحداث التطبيق المخصصة Events
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إطلاق أحداث التطبيق المخصصة Events في إطار العمل Laravel 12.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 MVC MVC
- Model View Controller
- النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
- للمراجعة
- 02 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
- للمراجعة
- 03 HTTP HTTP
- Hypertext Transfer Protocol
- بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
- للمراجعة
- 04 PSR PSR
- PHP Standards Recommendations
- المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «تخزين الاستعلامات المكلفة عبر Cache» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «إبطال وتحديث مفاتيح التخزين المؤقت» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من تخزين الاستعلامات المكلفة عبر Cache في إطار العمل Laravel 12؟
يسهم تخزين الاستعلامات المكلفة عبر Cache في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «إبطال وتحديث مفاتيح التخزين المؤقت» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة إطلاق أحداث التطبيق المخصصة Events بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة إطلاق أحداث التطبيق المخصصة Events.
لماذا يُعد تطبيق معالجة الأحداث عبر كلاسات المستمعات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق جدولة المهام الدورية عبر Schedule في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مرجع التخبئة والأحداث وجدولة المهام؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.