[PHP]Jak zoptymalizować wyświetlanie kategorii w Laravel 7? |
[PHP]Jak zoptymalizować wyświetlanie kategorii w Laravel 7? |
8.08.2020, 11:57:19
Post
#1
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) |
Witam,
Robie projekt w Laravel 7 oraz z wykorzystaniem: https://packagist.org/packages/kalnoy/nestedset. Mam skrypt który wyświetla mi dane dla jstree https://www.jstree.com Mam następujący kod kategorii:
Kategorii mam ok 170000 rekordów. Generuje kod dla mojego jstree za pomocą:
(zakładam aktualizację cache raz na rok) SelectedProductCategory = zaznaczone kategorie
Problem w tym że skrypt generuje się 2 minuty, zarówno na serwerze jak i na lokalnym komputerze Plik z cache zajmuje ok 300MB. Co dziwne zarówno jak mam plik z cache, jak i bez niego - skrypt zawsze długo się generuje. W jaki sposób można to zoptymalizować? |
|
|
8.08.2020, 12:57:42
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Generowanie na raz takiej porcji danych to zły pomysł. Użyj Ajax, załaduj kategorie root a potem doczuytuj sobie dynamicznie kolejne poziomy
|
|
|
9.08.2020, 00:15:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
jsTree nawet wspiera Ajax, więc nie musisz zbyt dużo kombinować. Masz bardzo dużo tych kategorii. Tak jak Pyton napisał, pozostaje Ci wczytywać je porcjami. przy odpowiednio zindeksowanej bazie, a zakładam, że ta paczka do Laravela odpowiednio definiuje indeksy dla kolumn, wyszukiwanie danych po ID rodzica będzie błyskawiczne.
Jeśli chcesz się bawić w optymalizację, to możesz np. rozważyć doczytywanie wszystkich kategorii potomnych danego poziomu już w momencie rozwijania dowolnej kategorii z poziomu wyżej, czyli np. jak Twoje drzewko wygląda tak: Kod - Jedzenie --Owoce ---Jabłka ----Zielone ----Czerwone ---Banany ---Owoce leśne --Warzywa itd. W momencie, załadowania strony mógłbyś już mieć wczytane wszystkie kategorie drugiego poziomu, czyli Owoce i Warzywa. Gdy ktoś kliknie Jedzenie, mógłbyś wczytać kategorie trzeciego poziomu, czyli Jabłka, Banany i Owoce Leśne. Gdy ktoś wybierze Owoce, wczytujesz już Zielone i Czerwone dla jabłek itd. Innymi słowy, wyprzedzasz zawsze o jeden poziom. W ten sposób w większości przypadków osiągniesz płynność interfejsu na poziomie aplikacji desktopowej, bo klikanie w poszczególne kategorie zajmie pewnie co najmniej sekundę. Taki podsuwam pomysł, choć i bez tego będzie przyzwoicie. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:59 |