Powolność Prestashop może pochodzić z kilku problemów, które będziesz musiał zidentyfikować.

Przed rozpoczęciem musisz wiedzieć, dlaczego uważasz, że twój Prestashop jest powolny. Rzeczywiście, jeśli wynika to z tego, że ma zły wynik w takich narzędziach jak Google's Pagespeed Insights czy GTMetrix, to powinieneś przeczytać nasz artykuł na ten konkretny temat: Zrozumienie i poprawa wyniku Pagespeed dla Twojego sklepu Prestashop . Jeśli wręcz przeciwnie jest to ogólna powolność sklepu, a nawet na backoffice, to z pewnością Twój Prestashop ma zbyt długie czasy odpowiedzi, będziemy mówić o TTFB (Time To First Byte) zbyt wolne. Ten artykuł pomoże Ci zidentyfikować ten problem TTFB.

Sprawdź ustawienia strony Prestashop Performance

Pierwszą rzeczą, którą należy zrobić, jest przejście do konfiguracji wydajności Prestashop w menu "Ustawienia zaawansowane", a następnie "Wydajność". Następnie sprawdź je za pomocą naszego artykułu "Prawidłowe ustawienia w celu poprawy wydajności Prestashop ".

Usuń zbędne moduły

Prestashop jest domyślnie wyposażony w wiele modułów, a niektóre są bezużyteczne lub zbędne. Na przykład, jeśli używasz Google Analytics, prawdopodobnie nie potrzebujesz wielu modułów statystyk.

Nie wahaj się przejść przez swoją listę modułów i zadać sobie pytanie, czy każdy z nich jest naprawdę niezbędny, czy nie.

Zrób kilka profilowań

Profilowanie to pomiar kilku danych podczas generowania strony. W Prestashop możesz mierzyć czas spędzony, zużytą pamięć, wykonane zapytania SQL, itp. podczas generowania stron produktów, kategorii, strony głównej, itp. ale także po stronie backoffice dla administracji sklepu. Rzeczywiście, ładowanie stron może być powolne również po stronie zaplecza i ważne jest, aby je zoptymalizować, aby spędzać mniej czasu na zarządzaniu sklepem (a nie szaleć, bo jest powolne!).

Profilowanie SQL

Zaczynam od profilowania SQL, ponieważ okazuje się być najbardziej skuteczne. Większość spowolnień zazwyczaj wynika z nieoptymalizowanych zapytań SQL. Spowolnienia wynikające z kodu PHP są rzadkie, chyba że dotyczą przetwarzania długiej listy plików.

Prestashop oferuje tryb "profilowania", który szczegółowo opiszę w kolejnym dziale. Jednakże ten tryb nie jest całkowicie satysfakcjonujący, ponieważ generuje jedynie znaczący "dump" danych bezpośrednio na wyświetlanych stronach i nie można go aktywować dla żądań Ajax.

W związku z tym stworzyłem moduł, który rejestruje wszystkie zapytania wysyłane do serwera MySQL, analizuje je i organizuje, aby dostarczyć Ci szczegółowy raport, podkreślając podejrzane zapytania, które wymagają Twojej uwagi. Już go testowałem u kilku klientów, którzy doświadczali spowolnień w swoim sklepie Prestashop, i moduł natychmiast zidentyfikował przyczynę spowolnienia.

Moduł może być używany w produkcji, ponieważ jego wpływ na odwiedzających jest minimalny. Faktycznie, profilowanie jest aktywne tylko dla administratora, który je włącza.

Ta funkcjonalność jest zintegrowana z modułem Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) , ale jest również dostępna jako niezależny moduł: SQL Profiler .

Profilowanie zintegrowane z Prestashop

Aby włączyć profilowanie, należy zmodyfikować stałą _PS_DEBUG_PROFILING_ w pliku /config/defines.inc.php.

Jeśli sklep jest otwarty dla klientów możesz aktywować narzędzie tylko dla Ciebie podając swoje IP w ten sposób:

define('_PS_DEBUG_PROFILING_', $_SERVER['REMOTE_ADDR'] == '37.123.456.789');

Możesz dowiedzieć się o swoim IP na stronie https://www.whatsmyip.org/

Po włączeniu profilowania zobaczysz kilka tabel wyświetlanych na wszystkich stronach po stronie back-office i front-office. Przejrzyjmy razem te wszystkie dane:

  • Czas ładowania: to jest TTFB, jeśli jest większy niż 1 sekunda (1000ms) to potwierdza to długi problem TTFB
  • Czas zapytania: jeśli jest to więcej niż 50% "Czasu ładowania" to masz zbyt wolne zapytanie SQL lub wykonywane zbyt wiele razy lub Twój serwer bazy danych nie jest wystarczająco wydajny.
  • Zapytania: jest to liczba wykonanych zapytań SQL, nie bój się, na Prestashop jest ona ogromna!

Nie będę wyszczególniał wszystkiego, tylko ważne dane.

Znajdziesz tam również tabelę z kolumnami "Time", "Cumulated Time", "Memory Usage" i "Memory Peak Usage" oraz następujące wiersze:

  • config: reprezentuje ładowanie Prestashop CMS, jeśli jest bardzo powolny tutaj to twój serwer nie jest wystarczająco mocny lub jest źle skonfigurowany
  • _construct: czas spędzony w konstruktorze kontrolera
  • init: czas spędzony w metodzie init() kontrolera
  • checkAccess: czas spędzony w metodzie checkAccess() kontrolera, która sprawdza uprawnienia, zwykle 0 (lub bardzo krótki)
  • setMedia: czas spędzony w metodzie setMedia() kontrolera w celu dodania plików CSS lub javascript, zazwyczaj bardzo krótki
  • postProcess: czas spędzony w metodzie postProcess() kontrolera, która pozwala zapisać dane formularza. Może być długi w zależności od formy i przetwarzania, które należy wykonać. Musi być 0 na klasycznej stronie wyświetlania, takiej jak produkty, kategorie itp.
  • initHeader: czas spędzony w metodzie initHeader() kontrolera. To tutaj pobierane są dane do wyświetlenia, choć często robi się to w initContent().
  • initContent: czas spędzony w metodzie initContent() kontrolera. To tutaj wywoływany jest hak displayHeader modułów, a także większość przetwarzania, które wygeneruje zawartość strony internetowej.
  • initFooter: czas spędzony w metodzie initFooter() kontrolera. Często puste, ponieważ niewiele kontrolerów wykonuje tu przetwarzanie.
  • display: czas spędzony w metodzie display() kontrolera. Jest to czas potrzebny Smarty do renderowania strony, innymi słowy czas spędzony na kompilacji szablonów i wypełnianiu wartości. Jeśli czas jest długi, być może zapomniałeś włączyć cache Smarty lub jest dużo elementów do wyświetlenia. Może to być również moduł lub widget, który jest bardzo powolny w jednym ze swoich haków.

Niestety w PS1.7 nie ma już informacji o wykonywaniu modułów i haków, Pull Request #20673 został zamknięty, ale nie wiem w której wersji zostanie scalony. W międzyczasie, jeśli masz Page Cache Ultimate, możesz znaleźć te dane we wbudowanym narzędziu do profilowania.

Tabela"Stoper SQL - xxx zapytań" zawiera listę wszystkich wykonanych zapytań SQL, od najwolniejszego do najszybszego. Osobiście uważam, że zapytanie, które przekracza 100ms, jest powolne. Jeśli jednak rząd wielkości czasów trwania jest taki sam, tzn. pojedyncze zapytanie nie wyróżnia się spośród innych ze względu na swoją powolność, to być może serwer MySQL nie działa wystarczająco dobrze.

Profilowanie zapewnione przez moduł Page Cache Ultimate

Nasz moduł Page Cache Ultimate (également intégré au module Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) zapewnia narzędzie do mierzenia czasu spędzonego przez każdy moduł w każdym haku. Procedura analizy powolności strony internetowej jest następująca:

  1. włączyć profilowanie na stronie konfiguracyjnej Page Cache Ultimate
  2. zrzucenie danych profilowania
  3. wyświetlić wolną stronę internetową
  4. odśwież tabelę danych i posortuj ją według "czasu trwania", od największego do najmniejszego

Jeśli jakiś moduł jest znacznie wolniejszy od pozostałych, to prawdopodobnie jest on winowajcą, w tym przypadku rozwiązaniem jest skontaktowanie się z deweloperem i poproszenie go o optymalizację prędkości ładowania tego modułu. Jeśli widzisz kilka wolnych modułów, możliwe, że problem jest związany z mocą serwera Apache lub serwera bazy danych (MySQL lub MariaDb).

Sprawdź moc swojego hostingu

Jeśli z profilowania nie wyłaniają się żadni podejrzani lub wskazówki, a powolność jest uogólniona, wtedy twój serwer może nie być skonfigurowany poprawnie lub może nie być wystarczająco mocny.

Wersja PHP

Zacznij od sprawdzenia, czy wersja PHP jest prawidłowa. Spójrz na tę tabelę, aby wiedzieć, jaką wersję PHP powinieneś mieć przynajmniej w zależności od wersji Prestashop:

Wersja PHP
Wersja PrestaShop ≤ 5.1 5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 ≥ 8.0
1.6.1.x Nie Tak Tak Tak Tak Tak Tak Wersja zalecana Nie Nie Nie Nie
1.7.0 ~ 1.7.3 Nie Nie Nie Tak Tak Tak Tak Wersja zalecana Nie Nie Nie Nie
1.7.4 Nie Nie Nie Nie Nie Tak Tak Wersja zalecana Nie Nie Nie Nie
1.7.5 ~ 1.7.6 Nie Nie Nie Nie Nie Tak Tak Tak Wersja zalecana Nie Nie Nie
1.7.7 Nie Nie Nie Nie Nie Nie Nie Tak Tak Wersja zalecana Nie Nie
1.7.8 Nie Nie Nie Nie Nie Nie Nie Tak Tak Tak Wersja zalecana Nie

Legenda: = wersja zalecana, Yes = obsługiwana, No = nieobsługiwana

Ustawienia i rozszerzenia PHP

Możesz również użyć tego skryptu PHP, aby sprawdzić, czy Twój serwer Apache jest poprawnie skonfigurowany dla Prestashop. Sprawdzi ustawienia i rozszerzenia niezbędne dla systemu CMS:

Pré-requis techniques pour Prestashop

Wniosek

Jeśli po tych wszystkich testach i poprawkach Twój TTFB pozostaje bardzo długi, ponad 1 sekundę, powinieneś rozważyć wzięcie mocniejszego pakietu hostingowego lub zainstalowanie naszego modułu cache HTML Page Cache Ultimate .

W każdym razie życzę Ci powodzenia i mam nadzieję, że szybko rozwiążesz swoje problemy z wydajnością w Prestashop!