هل لارافيل بطيء؟ تحسين أداء الاستعلامات والفهارس بأمثلة

يوليو 20, 2025

دليل عملي ومفصل مع أمثلة واقعية وعينات كود تسهّل عليك تفادي بطء Laravel وتحافظ على سرعة التطبيق.


1. 🧠 استدعي اللي محتاجه بس

لو بتعمل DB::table('users')->get() هتجيب كل الأعمدة والصفوف، وده بيأثر على الأداء. الحل:

$users = DB::table('users')
    ->select('id', 'name', 'email')
    ->where('status', 'active')
    ->limit(50)
    ->get();
      

ولو بتحب Eloquent:

$users = User::select('id','name','email')
    ->where('status','active')
    ->take(50)
    ->get();
      

ليه؟ بنقلل استهلاك الذاكرة والبيانات المرسلة ونحسن زمن الاستجابة.

2. 🔑 استغل الفهارس صح

لو بتفلتر مثلاً بـ customer_id أو status، لازم تضيف index:

Schema::table('orders', function (Blueprint $table) {
  $table->index('customer_id');
  $table->index(['status', 'created_at']); // فهرس مركّب
});

وبعدين php artisan migrate. ضيف الفهارس اللي فعلاً بتفيد في WHERE أو JOIN أو ORDER BY. ومتاديش أكتر من اللازم عشان التحديثات تبقى بطية.

3. 🛠️ راقِب واستكشف الأداء

في التطوير:

DB::enableQueryLog();
// بعد الاستعلام:
dd(DB::getQueryLog());

جرب أدوات زي Laravel Debugbar و Telescope، واستخدم EXPLAIN عشان تتأكد إن الفهرس بيستخدم:

EXPLAIN SELECT * FROM orders WHERE customer_id = 5;

4. ✅ جدول فحص سريع للتنفيذ

  • اختار الأعمدة اللي بتحتاجها بس باستخدام select().
  • حدد عدد الصفوف بـ limit() أو take().
  • حط فهارس على أعمدة الـ WHERE و JOIN.
  • استعمل Debugbar أو Telescope للفحص.
  • ابعد عن N+1 عن طريق الـ eager loading.

5. ✨ نصايح متقدمة

التحميل المبكّر:

$posts = Post::with('comments')->get();

التعامل مع جداول كبيرة:

Post::chunk(100, function($posts) {
  foreach ($posts as $post) {
    // اعمل اللي محتاجه...
  }
});

كاش للاستعلامات الثقيلة:

$posts = Cache::remember('all_posts', 60, function() {
  return Post::with('comments')->get();
});

استخدم SQL خالص للطلبات المعقدة:

$rows = DB::select('SELECT * FROM orders WHERE status = ?', ['active']);

راقب كل استعلام:

DB::listen(function($query){
  Log::info("SQL: {$query->sql} - Bindings: " . implode(',', $query->bindings) . " - Time: {$query->time}ms");
});

6. 🚀 لتطوير الأداء أكتر

  • شغّل OPcache في PHP.
  • نفّذ php artisan config:cache وroute:cache.
  • اختار كاش سريع زي Redis أو Memcached.
  • فكر في نشر التطبيق على أكثر من سيرفر.
  • راقب الأداء باستمرار وعدّل مبكراً وتكرارياً.

بتركيزك على استعلامات نظيفة، وفهارس ذكية، ومراقبة صحيحة – تطبيق Laravel بتاعك هيفضل سريع وحتى مع نمو البيانات.

المدونة

تذكير بالمهام مع Laravel وMongoDB

يونيو 30, 2025

📌 بناء تطبيق تذكير مهام المقال ده بيشرح إزاي نعمل تطبيق Laravel يستخدم MongoDB علشان يذكرك بالمهمات بتاعتك، مع تسجيل دخول، CRUD، وتذكير بالإيميلات...

React Native 0.80 وExecuTorch: بداية قوية للذكاء الاصطناعي المحلي في تطبيقات الموبايل

يوليو 28, 2025

🚀 الجديد في React Native 0.80 بالتفصيل الإصدار React Native 0.80 يعتبر نقطة تحول حقيقية في عالم تطوير تطبيقات الموبايل باستخدام React Native. التح...

أهم تحديثات Laravel و PHP لكتابة كود أنظف وأسرع

أغسطس 17, 2025

Laravel Global Scopes: Automatic Query Filtering Eloquent الأهمية: فرض فلترة ثابتة على جميع استعلامات الموديل (مثل Soft Deletes) دون تكرا...

إتقان التكرار غير المتزامن في JavaScript باستخدام Array.fromAsync()

يوليو 27, 2025

🔍 ما هي Array.fromAsync() بالضبط؟ Array.fromAsync() هي دالة static من كائن Array، شبيهة بالدالة Array.from()، لكن الفرق الجوهري هو أن Array.fromAs...

إزاي OAuth بيشتغل

يونيو 29, 2025

إزاي OAuth بيشتغل؟ OAuth هو بروتوكول بيخلّي التطبيقات تقدر تدخل على بياناتك بطريقة آمنة من غير ما تدّيهم الباسورد بتاعك. زي مثلًا لو حبيت تطبيق ينشر...

لارافيل 12: كل جديد من 12.0 لـ 12.19 – دليل شامل

يوليو 20, 2025

🔧 1. لارافيل 12.0 – ستارتر كيتس وتعديلات أساسية إصدار 12.0 جاب Starter Kits جاهزة للـ React، Vue، Livewire، وكمان دمج مع WorkOS AuthKit،...