Merhaba
9 üst menü bağlantısı ve bunların altında onlarca alt menü bağlantısı olan bir sistemi laravel de yazdım. Yalnız kodun çalışması bir işe yaramıyor çünkü tüm alt menüleri foreach ile döndürdüğü için yüklenme süresini inanılmaz uzatıyor.
Bende hiç değilse her menünün üstüne gelince ilgili menüye ait verileri ajax ile yükleteyim dedim bunu da tam manasıyla başaramadım. Daha önce böyle bir çalışmayı yapmış veya fikir verebilecek olan bir arkadaş varmıdır..
https://www.sitepoint.com/laravel-bl...sive-partials/ --Sınırsız alt menü yaparken kullandığım kaynak.
Laravel Menü Sistemi ile Ajax Kullanmak
6
●64
- 25-07-2021, 18:22:31Eğer menüler sürekli değişmiyorsa veritabanı sorgusu ise süreyi uzatan sorguyu laravel cache ile bir kere cache alıp hızlıca yüklenmesini sağlayabilirsiniz
- 25-07-2021, 19:36:29Gönderdiğim data cache de zaten. Ancak döngüye giren verileri cacheden göndermiyor. Beynim durdu. Sayfa hızını inanılmaz düşüyor.DarknessHero adlı üyeden alıntı: mesajı görüntüle
- 25-07-2021, 19:41:58Cache e aldığınız kısmın kodlarını paylaşır mısınız doğru alınmışsa o kadar bir gecikme olacağını sanmıyorum ama
- 25-07-2021, 19:59:12Aşağıdaki kod ile cache edip gönderiyorum menüleri. with içinde gönderdiğim child lar submenu oluyor. Onları da detaylı anlatacağım aşağıda.DarknessHero adlı üyeden alıntı: mesajı görüntüle
$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]) @endforeachYukarı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 - 25-07-2021, 20:10:02Attığınız kodlara baktığımda problem olacak bir kısım göremedim anca tek gözüme çarpan şey $minute değişkeni oranın değeri nedir ve orası saniye olarak alıyor eğer dalgınlığınıza gelmişse. Kullandığınız cache sisteminde cachelenmiş veriyi değiştirdiğinizde bir değişim oluyor mu kontrol eder misiniz? Ve cache:remember yerine rememberForever kullanmayı dener misiniz? Benim görüşüm eğer gözümden bir şey kaçmamışsa cache kaydetme ya da okuma kısmında bir problem var
- 25-07-2021, 20:53:22Şuan bir kod denedim. En base haliyle aşağıdaki gibi.DarknessHero adlı üyeden alıntı: mesajı görüntüle
Bu kod ile hiçbir query döndürmeden aynı sonucu veriyor. Style eklerini de yapıştırıp bir bakacağım. Hiç blade döndürmeye gerek kalmıcak o zaman.
@foreach ($Menus as $menu) <li>{{ $menu->title }}</li> @foreach ($menu->child as $submenu) {{ $submenu->title }} @endforeach @endforeachŞüphelendiğim kısım aşağıdaki bölümdü. Burası her seferinde yeniden döndürdüğü için query adedi arttırıyor.
@foreach ($sideMenu->child as $key => $childMenu) @if ($childMenu->status == '1') @include("frontend.megamenu", ["sideMenu" => $childMenu]) @endif @endforeach