• 25-07-2021, 18:15:09
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    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.
  • 25-07-2021, 18:22:31
    #2
    Eğ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:29
    #3
    DarknessHero adlı üyeden alıntı: mesajı görüntüle
    Eğ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
    Gö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.
  • 25-07-2021, 19:41:58
    #4
    Cache 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:12
    #5
    DarknessHero adlı üyeden alıntı: mesajı görüntüle
    Cache 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
    Aş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.

    $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
  • 25-07-2021, 20:10:02
    #6
    Attığı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
    #7
    DarknessHero adlı üyeden alıntı: mesajı görüntüle
    Attığı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
    Şuan bir kod denedim. En base haliyle aşağıdaki gibi.

    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