ليه Eloquent ممكن يكون بطيء؟
Eloquent ORM سهل الاستخدام بس لو مش واخد بالك ممكن يعمل مشاكل أداء كبيرة. أشهر المشاكل:
- مشكلة N+1 Query
- تحميل بيانات مش محتاجها (Over-fetching)
- غياب الـ Indexes على قواعد البيانات
- عدم استخدام الـ Caching
1. مشكلة N+1 وحلها
مشكلة N+1 هي أشهر مشكلة في Eloquent. بتحصل لما بتعمل Query جوه Loop:
// غلط: هيعمل 1 + عدد البوستات queries
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name;
}
// صح: Eager Loading - query واحدة بس
$posts = Post::with('author')->get();
2. Select فقط ما تحتاجه
// غلط: بيجيب كل الأعمدة
$users = User::all();
// صح: جيب بس اللي محتاجه
$users = User::select('id', 'name', 'email')->get();
3. Chunking للبيانات الكبيرة
// صح: بيشتغل على 1000 record في كل مرة
User::chunk(1000, function ($users) {
foreach ($users as $user) {
processUser($user);
}
});
4. Database Indexes
أي column بتعمل عليه where أو orderBy كتير لازم يكون عنده Index:
$table->index('email');
$table->index(['status', 'created_at']);
5. Caching
$users = Cache::remember('active-users', 3600, function () {
return User::where('is_active', true)->get();
});
بتطبيق النقط دي ممكن تحسن أداء تطبيقك بنسبة 70-80% في بعض الحالات.