Merhaba,
Sonsuz alt menüye sahip bir menü sistemim var. Yapı tam olarak istediğim gibi çalışıyor lakin performans çok çok kötü. Foreach ile döndürdüğüm yapı sebebiyle cache de olan menü query si cacheden kopup her veri için bir query iş yapıyor ve sistem şişiyor. Sayfa açılma süresi inanılmaz artıyor.
Bu noktada yardımınızı rica ediyorum. Siz bu işi nasıl yapardınız.
Aşağıdaki kod ile cache edip gönderiyorum menüleri. with içinde gönderdiğim child lar submenu oluyor. Kodlarım detaylı şekilde aşağıdaki gibi.
$Menus = cache::remember("menu_type_front_menu.$menu_type", $minute, function () use ($menu_type) {
return $Menus = Menu::where('status', 1)
->where("parent_id", null)
->where('status', '1')
->with("parent", "child.file", "file")
->orderBy('sort_order')
->get();
});
return $Menus;
`
Blade template aşağıdaki gibi gönderiyorum.
`
@foreach ($Menus as $sideMenu)
@include("frontend.megamenu", ["sideMenu" => $sideMenu])
@endforeach
`
Yukarıdaki kod içindeki megamenu olarak tanımladığım blade template içeriği de şu şekilde.
`
@if (count($sideMenu->child) > '0' && $loop->depth == 1)
<li class="nav-item dropdown has-megamenu ulinkh py-3">
@elseif (!empty($sideMenu->parent_id))
<li class="nav-item">
@else
<li class="nav-item ulinkh py-3">
@endif
<a href="{{ url($sideMenu->slug) }}" @if (count($sideMenu->child) > '0' && $sideMenu->parent_id == null) class="nav-link border-start ulink px-3"
id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
@elseif(!empty($sideMenu->parent_id) && $loop->depth == 2) class="text-dark ulink-alt link-dark text-decoration-none fw-bold"
@elseif(!empty($sideMenu->parent_id)) class="link-dark text-decoration-none fw-light"
@else class="nav-link border-start ulink px-3" @endif @if (Request::segment(1) == '' && $loop->index == 0 && $sideMenu->parent_id == null) active
@endif
@if (isset($sideMenu->description)) title="{{ $sideMenu->description }}"
@endif
@if ($sideMenu->target == '1') target="_blank" @endif
>
{{ $sideMenu->title }}
@if (count($sideMenu->child) > '0' && $sideMenu->parent_id == null) <i
class="fas fa-angle-down"></i>@endif
</a>
@if (count($sideMenu->child) > 0)
@if ($loop->depth == 1)
<div class="dropdown-menu megamenu" role="menu">
<div class="row ">
{{-- <div class="row g-3"> --}}
<div class="col-md-7">
<div class="row row-cols-5">
@foreach ($sideMenu->child as $key => $childMenu)
@if (count($childMenu->file) == 0)
<div class="col-4 col-md-3">
<div class="col-megamenu">
<ul class="list-unstyled h-auto">
@if ($childMenu->status == '1')
[B] @include("frontend.megamenu", [/B][B]["sideMenu" => $childMenu])[/B]
@endif
</ul>
</div>
</div>
@endif
@endforeach
</div>
</div>
<div class="col-md-5">
<div class="col-megamenu">
<div class="row">
@foreach ($sideMenu->child as $key => $childMenu)
@if (count($childMenu->file) > 0)
<div class="col-12 col-md-6 mb-4">
<a href="{{ url($childMenu->slug) }}"><img
class="rounded mx-auto d-block img-fluid lazyload" loading="lazy"
data-src="{{ get_image($childMenu->file[0]->path, 'Dikdortgen', $childMenu->file[0]->file_name) }}"
alt="{{ $childMenu->file[0]->file_name }}"></a>
</div>
@endif
@endforeach
</div>
</div>
</div>
</div>
</div>
@elseif($loop->depth == 2)
@foreach ($sideMenu->child as $key => $childMenu)
@if ($childMenu->status == '1')
[B] @include("frontend.megamenu", [/B][B]["sideMenu" => $childMenu])[/B]
@endif
@endforeach
@endif
@endif
</li>
`
Fark ettiğiniz üzere aşağıda kesit aldığım kodlar sürekli bir query yemekte. Bu da sistemi mahvediyor.
`
@foreach ($sideMenu->child as $key => $childMenu)
@if ($childMenu->status == '1')
[B] @include("frontend.megamenu", [/B][B]["sideMenu" => $childMenu])[/B]
@endif
@endforeach
`