واحدة من أهم الإمور التي يجب أن يأخذها المطور بعين الإعتبار أثناء بناء تطبيقاته هي تقليل إستهلاك الذاكرة، في هذا المقال سوف نتحدث عن تقليل إستهلاك الذاكرة، عن طريق جلب البيانات التي نريدها من قاعدة البيانات.
إن تقليل إستهلاك الذاكرة لا يؤثر فقط على قدرة السيرفر على حمل الموقع، بل يؤثر أيضا على سرعة الموقع، حيث يجعل من الكود أسرع في عرض البيانات للزوار.
تخيل أن لدينا قاعدة بيانات تحتوي على مجموعة من الكتب ونريد إظهارها حسب سنة إنتاج كل كتاب كما بالصورة التالية
جملة الإستعلام للحصول على الكتب حسب تاريخ الإنتاج لكل كتاب
public function index(){ $years = Book::query() ->with('author') ->latest('published_at') ->get() ->groupBy(function ($book){ return Carbon::parse($book->published_at)->format('Y'); }); return view('books',compact('years')); }
وفي ملف blade للعرض
<div class="row">
@foreach($years as $year => $books)
<div class="col-4">
<div class="card mt-2">
<div class="card-header">{{ $year }}</div>
<ul class="list-group list-group-flush">
@foreach($books as $book)
<li class="list-group-item">{{ \Illuminate\Support\Str::limit($book->title, 40) }}</li>
@endforeach
</ul>
</div>
</div>
@endforeach
</div>
لو ألقينا نظرة على debug bar نجد أنه
الحل هنا لتخفيف إستهلاك الذاكرة من خلال جلب الحقول التي نريدها فقط من قاعدة البيانات
public function index(){ $years = Book::query() ->select('id','title','published_at','author_id') ->with('author:id,title') ->latest('published_at') ->get() ->groupBy(function ($book){ return Carbon::parse($book->published_at)->format('Y'); }); return view('books',compact('years')); }
لو ألقينا نظرة على debug Bar نجد أنه
عندي سؤال بخصوص ال grouping؟ ليه سويت ال group by على مستوى ال php وما سويته على مستوى قاعدة البيانات؟
زائر
مشكووووووووووووووووور يا طيب