Un cliente si è rivolto a noi con gravi problemi di velocità del negozio online Magento.

Il negozio online è stato impostato da un altro esecutore che non ha assicurato una realizzazione di qualità, ossia senza le conoscenze sufficienti in materia di ottimizzazione della velocità di funzionamento dell’applicazione.

Procedura:

Abbiamo ottenuto tutti gli accessi, sia al codice del software che al database del negozio online. Abbiamo configurato il negozio nei nostri ambienti, dove abbiamo potuto analizzare lo stato attuale dell’applicazione.

La prima cosa che abbiamo notato è che il cliente possedeva una versione obsoleta della piattaforma Magento. Per molte versioni, il passaggio può essere un processo piuttosto impegnativo, anche perché è spesso necessario l’aggiornamento della versione PHP, il che incide anche sugli altri plugin installati da terzi. Con un po’ di impegno siamo riusciti ad aggiornare il negozio Magento, alcuni plugin installati e la versione PHP.

In tal modo abbiamo inoltre assicurato una migliore sicurezza del negozio online.

Una volta completato l’aggiornamento, abbiamo iniziato a ottimizzare la velocità. Per risolvere i problemi di performance delle applicazioni e della piattaforma Magento, utilizziamo lo strumento BlackFire.io. Questo strumento consente una profilazione precisa di ogni processo (request) eseguito nel negozio online, sia che si tratti del tempo di esecuzione del codice PHP che dell’esecuzione di richieste (query) al database.

Con questo strumento abbiamo verificato tutte le pagine principali del negozio online – la prima pagina, la pagina della categoria, la pagina del prodotto, il carrello e il checkout.

Alla fine, abbiamo anche eseguito una revisione delle query critiche al database.

Prima pagina

Analizzando la prima pagina, abbiamo scoperto che il collo di bottiglia più grande è il file “mobilemenu.phtml”, composto dalla navigazione mobile dalle categorie Magento e dai collegamenti definiti manualmente. Per recuperare le categorie da Magento, vengono effettuate 3 query identiche al database utilizzando un left join sulla tabella core_url_rewrite. Questo particolare left join non utilizza indici definiti, ma esegue un range scan dell’intera tabella, il che non è ottimale e rallenta molto la query.

Allo stesso modo, la logica del file mobilemenu.phtml si esegue ogni volta che la pagina viene caricata, ovvero ad ogni request si carica il blocco che esegue il rendering del template mobilemenu.phtml.

Tale blocco non utilizza la “block cache”, seppure lo potrebbe. Nella visualizzazione della navigazione (nome della categoria e URL), le categorie non cambiano così frequentemente, quindi è consigliabile memorizzarle nella “block cache”. Inserendo uno specifico blocco (.phtml) nella “block cache”, tale viene eseguito una sola volta, poi viene conservato in memoria (redis) fino al successivo. Ciò rende tutti i request successivi notevolmente più veloci.

Con l’ottimizzazione delle query e l’utilizzo della “block cache”, abbiamo ridotto il tempo di caricamento della prima pagina fino al 98 %. TTFB (Time to first byte) della prima pagina prima dell’ottimizzazione: 16 secondi TTFB dopo l’ottimizzazione: 0.22 secondi

TTFB (Time to first byte) della prima pagina prima dell’ottimizzazione: 16 secondi TTFB dopo l’ottimizzazione: 0.22 secondi

Se avete anche Voi problemi di velocità del Vostro negozio online, Vi invitiamo a contattarci.

Pagina della categoria

Analizzando l’esecuzione della pagina delle categorie, abbiamo riscontrato problemi anche nel file “mobilemenu.phtml” che viene eseguito su tutte le pagine.

Già con la precedente ottimizzazione di questo file, abbiamo notevolmente accelerato le prestazioni nella pagina delle categorie.

Da 15,8 secondi abbiamo accelerato il tempo di esecuzione della categoria a 0,86 secondi.

Il collo di bottiglia è rappresentato anche dal file uaee.phtml, che fa parte del modulo Tatvic_Uaee di terze parti e viene utilizzato per inviare vari dati ed eventi allo strumento Google Analytics. Dopo un’analisi dettagliata del codice sorgente del file menzionato, abbiamo trovato la fonte principale dei problemi di prestazione e li abbiamo risolti.

Ciò ha ulteriormente ridotto il tempo di caricamento della pagina delle categorie di altri 0,4 secondi.

Pertanto, il TTFB è stato di soli 0,4 secondi dopo l’ottimizzazione della pagina delle categorie.

Pagina del prodotto

Anche in questo caso l’ottimizzazione del file “mobilemenu.phtml” ha aiutato notevolmente i tempi di esecuzione della pagina del prodotto. La pagina del prodotto ha impiegato ben 26 secondi prima che iniziasse l’ottimizzazione. Dopo aver ottimizzato il file “mobilemenu.phtml”, il tempo di esecuzione della pagina del prodotto è stato ridotto a 2,6 secondi, che non era ancora sufficiente.

Un grosso collo di bottiglia è anche la navigazione laterale nella pagina del prodotto. Il negozio online ha inoltre l’intero albero di categorizzazione visualizzato nella colonna di sinistra della pagina del prodotto. Per la visualizzazione della navigazione laterale si utilizza il modulo di terze parti “Codnitive_Sidenav” che altrettanto provoca problemi di performance.

In questo caso purtroppo, a causa della modalità di funzionamento, non è stato possibile utilizzare la cache, ma abbiamo trovato un commento nel codice sorgente che indica che lo sviluppatore del modulo è a conoscenza del problema, ma richiede l’acquisto della versione “Ultra” del modulo per prestazioni migliori.

Dopo un’analisi più dettagliata del codice sorgente del modulo, abbiamo comunque individuato la causa principale del rallentamento ed eliminata con successo. Ciò ha ridotto il caricamento di ciascuna pagina di prodotto di ulteriori 2,5 secondi. Pertanto, il tempo di caricamento finale della pagina del prodotto è di 0,5 secondi.

Rispetto allo stato iniziale, abbiamo migliorato il tempo di caricamento della pagina prodotto del 97 %.

Ottimizzazione delle query del database

Analizzando le query, abbiamo rilevato una query specifica che era il motivo principale del rallentamento delle prestazioni della pagina. Dopo un esame dettagliato, abbiamo scoperto che la query non utilizza indici, quindi abbiamo eseguito un’ottimizzazione che ha ridotto il tempo della query da 5 secondi a 10 millisecondi. La query menzionata è stata eseguita 3 volte su ciascuna pagina, il che significa che il caricamento di ciascuna pagina è stato rallentato di circa 15 secondi a causa di ciò.

Riassunto

 Prima dell’ottimizzazioneDopo l’ottimizzazione% di miglioramenti
Prima pagina18 secondi0.2 secondi-98%
Pagina della categoria19 secondi0.45 secondi-97%
Pagina del prodotto26 secondi0.5 secondi-97%
Carrello18 secondi0.4 secondi-97%
Checkout18 secondi0.4 secondi-97%

Il negozio esistente presentava grossi problemi di prestazioni poiché lo stato iniziale era significativamente troppo lento come standard per un negozio Magento.

Questo progetto ha dimostrato ancora una volta che sul mercato sono presenti molti plugin di terze parti di scarsa qualità che possono rallentare significativamente le prestazioni del Vostro negozio online.

Suggeriamo sempre di utilizzare plugin di terze parti con parsimonia e solo dove realmente necessario. Dopo l’installazione è necessario controllare e analizzare attentamente la velocità operativa del plugin installato.

Con questo progetto abbiamo accelerato notevolmente il funzionamento del negozio online del cliente. Abbiamo anche aggiornato la piattaforma Magento e quindi migliorato notevolmente la sicurezza del negozio online e dei suoi dati.

Se avete anche Voi problemi di velocità del Vostro negozio online, Vi invitiamo a contattarci.

Se avete anche Voi problemi di velocità del Vostro negozio online, Vi invitiamo a contattarci.

Elitek d.o.o.Prade C. XV/216000, KoperSlovenia, EU