La lentezza di Prestashop può derivare da diversi problemi che dovrete identificare.

Prima di iniziare, è necessario sapere perché si ritiene che Prestashop sia lento. Infatti, se è perché ha un cattivo punteggio su strumenti come Pagespeed Insights o GTMetrix di Google, allora dovreste leggere il nostro articolo su questo argomento specifico: Capire e migliorare il punteggio Pagespeed del vostro negozio Prestashop . Se invece si tratta di una lentezza generale del negozio, e anche del backoffice, allora è sicuramente che il vostro Prestashop ha tempi di risposta troppo lunghi, parleremo di TTFB (Time To First Byte) troppo lento. Questo articolo vi aiuterà a identificare il problema TTFB.

Controllare le impostazioni della pagina Prestashop Performance

La prima cosa da fare è andare alla configurazione delle prestazioni di Prestashop nel menu "Impostazioni avanzate" e poi "Prestazioni". Quindi verificateli con il nostro articolo "Le impostazioni corrette per migliorare le prestazioni di Prestashop ".

Rimuovere i moduli non necessari

Prestashop viene fornito con molti moduli di default e alcuni sono inutili o ridondanti. Ad esempio, se utilizzate Google Analytics, probabilmente non avete bisogno dei numerosi moduli di statistica.

Non esitate a scorrere l'elenco dei moduli e a chiedervi se ognuno di essi è davvero necessario o meno.

Eseguire una profilazione

La profilazione è la misurazione di diversi dati durante la generazione di una pagina. Su Prestashop è possibile misurare il tempo impiegato, la memoria consumata, le query SQL eseguite, ecc. durante la generazione delle pagine dei prodotti, delle categorie, della home page, ecc. ma anche sul lato backoffice per l'amministrazione del negozio. In effetti, il caricamento delle pagine può essere lento anche dal lato del back-office ed è importante ottimizzarle per dedicare meno tempo alla gestione del negozio (e non impazzire perché è lento!).

Profilazione SQL

Inizio con la profilazione SQL perché risulta essere la più efficace. Infatti, la maggior parte dei rallentamenti sono generalmente causati da query SQL non ottimizzate. I rallentamenti attribuibili al codice PHP sono rari a meno che non coinvolgano il trattamento di una lunga lista di file.

Prestashop offre una modalità di "profilazione" che dettaglierò nella sezione seguente. Tuttavia, questa modalità non è completamente soddisfacente perché si limita a generare un "dump" considerevole di dati direttamente sulle pagine visualizzate e non può essere attivata per le richieste Ajax.

Pertanto, ho sviluppato un modulo che registra tutte le query inviate al server MySQL, le analizza e le organizza per fornirti un rapporto dettagliato, evidenziando le query sospette che meritano la tua attenzione. L'ho già testato con diversi clienti che stavano riscontrando rallentamenti nel loro negozio Prestashop, e il modulo ha immediatamente individuato la causa del rallentamento.

Il modulo può essere utilizzato in produzione perché il suo impatto sui visitatori è trascurabile. Infatti, la profilazione è attiva solo per l'amministratore che la attiva.

Questa funzionalità è integrata nel modulo Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) ma è anche disponibile come modulo indipendente: SQL Profiler .

Profilazione integrata in Prestashop

Per attivare la profilazione, modificare la costante _PS_DEBUG_PROFILING_ nel file /config/defines.inc.php.

Se il negozio è aperto ai clienti, potete attivare lo strumento solo per voi, specificando il vostro IP in questo modo:

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

Potete trovare il vostro IP su https://www.whatsmyip.org/

Una volta attivata la profilazione, in tutte le pagine del back-office e del front-office vengono visualizzate diverse tabelle. Analizziamo insieme tutti questi dati:

  • Tempo di caricamento: si tratta del TTFB, se è superiore a 1 secondo (1000ms) allora conferma un problema di TTFB lungo
  • Tempo di interrogazione: se è superiore al 50% del "Tempo di caricamento", la query SQL è troppo lenta o viene eseguita troppe volte, oppure il server del database non è abbastanza potente.
  • Query: è il numero di query SQL eseguite, non temete, su Prestashop è enorme!

Non dettaglierò tutto, ma solo i dati importanti.

Troverete anche una tabella con le colonne "Tempo", "Tempo cumulato", "Utilizzo della memoria" e "Picco di utilizzo della memoria" e le seguenti righe:

  • config: rappresenta il caricamento del CMS Prestashop, se qui è molto lento allora il vostro server non è abbastanza potente o è configurato male
  • _construct: tempo trascorso nel costruttore del controllore
  • init: tempo trascorso nel metodo init() del controllore
  • checkAccess: tempo trascorso nel metodo checkAccess() del controllore che controlla i permessi, normalmente 0 (o molto breve)
  • setMedia: tempo trascorso nel metodo setMedia() del controllore per aggiungere file CSS o javascript, normalmente molto breve
  • postProcess: tempo trascorso nel metodo postProcess() del controllore, che consente di salvare i dati di un modulo. Può essere lungo a seconda del modulo e dell'elaborazione da effettuare. Deve essere 0 su una pagina di visualizzazione classica, come prodotti, categorie, ecc.
  • initHeader: tempo trascorso nel metodo initHeader() del controllore. È qui che vengono recuperati i dati da visualizzare, anche se spesso ciò avviene nel metodo initContent().
  • initContent: tempo trascorso nel metodo initContent() del controllore. È qui che viene richiamato il gancio displayHeader dei moduli e la maggior parte dell'elaborazione che genererà il contenuto della pagina web.
  • initFooter: tempo trascorso nel metodo initFooter() del controllore. Spesso è vuoto perché pochi controllori eseguono l'elaborazione qui.
  • display: tempo trascorso nel metodo display() del controllore. Questo è il tempo impiegato da Smarty per rendere la pagina, in altre parole il tempo speso per compilare i template e popolare i valori. Se il tempo è lungo, è possibile che si sia dimenticato di attivare la cache di Smarty o che ci siano molti elementi da visualizzare. Potrebbe anche trattarsi di un modulo o di un widget che è molto lento in uno dei suoi hook.

Purtroppo in PS1.7 non ci sono più informazioni sull'esecuzione dei moduli e degli hook, è stata chiusa la richiesta di pull #20673 ma non so in quale versione verrà unita. Nel frattempo, se si dispone di Page Cache Ultimate è possibile trovare questi dati nello strumento di profilazione integrato.

La tabella"Cronometro SQL - xxx query" elenca tutte le query SQL eseguite, dalla più lenta alla più veloce. Personalmente considero lenta una query che supera i 100ms. Tuttavia, se l'ordine di grandezza delle durate è lo stesso, cioè una singola query non si distingue dalle altre per la sua lentezza, allora forse è il server MySQL a non avere prestazioni sufficienti.

Profilazione fornita dal modulo Page Cache Ultimate

Il nostro modulo Page Cache Ultimate (également intégré au module Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) fornisce uno strumento per misurare il tempo impiegato da ciascun modulo in ogni gancio. La procedura per analizzare la lentezza di una pagina web è la seguente:

  1. abilitare la profilazione nella pagina di configurazione di Page Cache Ultimate
  2. scaricare i dati di profilazione
  3. visualizzare la pagina web lenta
  4. aggiornare la tabella dei dati e ordinarla per "durata", dalla più grande alla più piccola

Se un modulo è molto più lento degli altri, probabilmente è il colpevole; in questo caso la soluzione è contattare lo sviluppatore e chiedergli di ottimizzare la velocità di caricamento di questo modulo. Se si notano diversi moduli lenti, è possibile che il problema sia legato alla potenza del server Apache o del server di database (MySQL o MariaDb).

Controllare la potenza dell'hosting

Se dalla profilazione non emergono sospetti o indizi e la lentezza è generalizzata, è possibile che il server non sia configurato correttamente o che non sia sufficientemente potente.

Versione PHP

Iniziare controllando se la versione di PHP è corretta. Consultate questa tabella per sapere quale versione di PHP dovreste avere almeno in base alla versione di Prestashop:

Versione PHP
Versione di 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 No Versione consigliata No No No No
1.7.0 ~ 1.7.3 No No No Versione consigliata No No No No
1.7.4 No No No No No Versione consigliata No No No No
1.7.5 ~ 1.7.6 No No No No No Versione consigliata No No No
1.7.7 No No No No No No No Versione consigliata No No
1.7.8 No No No No No No No Versione consigliata No

Legenda: = Versione consigliata, = Supportata, No = Non supportata

Impostazioni ed estensioni PHP

Potete anche utilizzare questo script PHP per verificare se il vostro server Apache è configurato correttamente per Prestashop. Verificherà le impostazioni e le estensioni essenziali per il CMS:

Pré-requis techniques pour Prestashop

Conclusione

Se dopo tutti questi test e correzioni il vostro TTFB rimane molto lungo, più di 1 secondo, dovreste considerare di prendere un pacchetto di hosting più potente o installare il nostro modulo di cache HTML Page Cache Ultimate .

In ogni caso vi auguro buona fortuna e spero che possiate risolvere rapidamente i vostri problemi di prestazioni con Prestashop!