برمجة وتطوير

مشكلة في تحسين أداء استعلامات Laravel Eloquent

آية محمود · برمجة وتطوير
مرحباً يا جماعة الخير، أواجه مشكلة في بطء تحميل بعض الصفحات لدي في مشروع Laravel. لدي جدول `orders` يحتوي على آلاف السجلات، وعندما أحاول جلب الطلبات مع علاقاتها (مثل `user` و `products`) باستخدام `with()`, يستغرق الأمر وقتاً طويلاً جداً. استخدمت `with(['user', 'products'])` لكن ما زلت أرى بطئاً ملحوظاً. هل هناك…مرحباً يا جماعة الخير، أواجه مشكلة في بطء تحميل بعض الصفحات لدي في مشروع Laravel. لدي جدول `orders` يحتوي على آلاف السجلات، وعندما أحاول جلب الطلبات مع علاقاتها (مثل `user` و `products`) باستخدام `with()`, يستغرق الأمر وقتاً طويلاً جداً. استخدمت `with(['user', 'products'])` لكن ما زلت أرى بطئاً ملحوظاً. هل هناك أي نصائح إضافية لتحسين أداء استعلامات Eloquent، خصوصاً مع العلاقات المتداخلة؟ وهل يجب أن أفكر في استخدام الـ`chunk` أو `lazy loading` بطريقة مختلفة؟ أبحث عن حلول عملية ومجربة.
49 3 تعليق 3 مشاركة 108 مشاهدة
تعليق

التعليقات (3)

يمكنك قراءة كل التعليقات بحرية، لكن الكتابة والتفاعل يحتاجان تسجيل الدخول.

طب هو أنت بتعرض كام طلب في الصفحة الواحدة؟ لو بتجيب آلاف السجلات دي عشان تعرضها في صفحة واحدة، فمهما عملت optimization هيفضل في بطء، والـ `chunk` أو `lazy loading` اللي ذكرتها دي مش للعرض المباشر ولكن للتعامل مع البيانات على دفعات. الأفضل هنا هو الـ `Pagination` عشان تجيب عدد محدود من الطلبات (مثلاً 20 أو 50) بس في كل مرة. هل ده اللي تقصده بـ `lazy loading` للعرض؟

👍 11 ❤️ 4 😮 4
سارة منصور سارة منصور منذ 5 أيام

يا جماعة الخير، أهم حاجة في مشاكل الأداء دي هي الـ `N+1 problem`. تأكد إنك بتحل المشكلة دي صح باستخدام `with()` أو `load()`. لو لسه فيه بطء، ممكن تحتاج تعمل Indexing صح على الـ Foreign Keys في جداول الـ `orders`, `users`, و `products` بتاعتك. ده بيفرق كتير أوي في السرعة.

❤️ 8 😮 5 👍 4

كلامك صحيح بخصوص الـ N+1، بس أحياناً حتى مع `with()` لو العلاقات كتير أو في `whereHas`، الموضوع ممكن يفضل بطيء. جربت تستخدم `Laravel Debugbar`؟ ده كنز حرفياً عشان تشوف إيه الاستعلامات اللي بتاخد وقت وتعرف فين بالظبط المشكلة. وممكن تبص كمان على `join` يدوي لو الـ `with()` مش مسعفاك، بس ده بيخلي الكود أقل Eloquent-y.

👍 12 ❤️ 11 🤗 1