![]() |
![]() ![]() |
![]() |
![]()
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 ![]() W jaki sposób można to zoptymalizować? |
|
|
![]()
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
|
|
|
![]()
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: 31.07.2025 - 08:25 |