Ultimamente un nostro cliente molto importante ci ha messo di fronte ad una problematica molto importante.
Il cliente usa wordpress e woocommerce e devo ammettere che, nonostante gli esperti suggeriscano di passare a shopify per una serie di motivi, io continuo ad apprezzare la combinazione opensource per una serie di motivi:
- Facile gestione dei contenuti da parte dell’utente con sistemi di editor semplici
- Facile implementazione di prodotti in woocommerce
- Soluzioni di vendita personalizzabili ( gestione delle tasse, tasse per paese, ecc… insomma chi vende all’estero sa di cosa parlo)
- Ampio parco di plugin aggintivi per implementazioni ad Hoc
- Buona gestione del SEO in generale
Insomma queste sono i brevi vantaggi che secondo me fanno di woocommerce la scelta numero 1.
Se volete confrontarvi con me potete volentieri usare i commenti per una discussione costruttiva.
Le percentuali di Woocommerce
Woocommence inoltre è usato da circa il 5% di tutti i siti web, mentre è usato da circa il 29% dei negozi online, il 22% del primo milione di negozi online posizionati è gestito con Woocommerce.
Una buona fetta di mercato direi.
Ma veniamo al problema più grande.
I problemi di Woocommeerce
Proprio per la sua gestione del database, secondo me sbagliata in partenza ma che si porta dietro in tutta la sua esistenza, WordPress e Woocommerce diventano molto problematici per negozi con uno storico di molti ordini e quanto contemporaneamente i clienti effettuano ordini sul sito.
Entriamo nell’analisi un po’ più approfondita.
Diciamo che in media (dipende da che plugin abbiamo installati) un ordine salva più o meno 40 campi di database.
Questi campi però, per la gestione scellerata suddetta, vengono salvati tutti, come anche quelli delle pagine, degli articoli, ecc…, in un’unica tabella: _postmeta.
Quindi potete immaginare il problema, su negozi importanti questa tabella diventa gigantesca, con chiavi ID progressive oltre il miliardo.
Non sto esagerando.
Potete immaginare lo sforzo del server quando durante il black friday o sotto Natale ci sono ordini contemporanei che deve elaborare, catalogare e gestire mentre – per esempio – gli addetti all’amministrazione nel backend stanno caricando gli ordini sforzando ulteriormente la gestione del database.
Ingestibile per sua natura da Woocommerce, con la conseguenza di lunghi timeout del server e quindi una perdita potenziale di ordini.
Ecco una breve lista di primi interventi per arginare il problema:
- Anche i siti WooCommerce più piccoli con pochi ordini e poco traffico possono bloccarsi e perdere denaro. Assicuratevi di testare la vostra infrastruttura ( server e hosting).
- Cercare un buon host WordPress gestito e non avere plug-in o codice personalizzato che rallentano il vostro sito.
- Testate il sito con Query monitor per capire dove sono i “bottle neck”
- Load Impact è un ottimo strumento per testare il carico.
Ora veniamo alla soluzione intrapresa per il cliente
Cercando di fare un debug dei vari log siamo incappati nella problematica della tabella _postmeta.
In sostanza wordpress gestisce di sua natura molto male l’indice di questa tabella.
Re-indicizzando creando una chiave aggiuntiva e questa tabella la gestione, oltre che utilizzare il design CRUD di WooCommerce per salvare i dati degli ordini in un’unica tabella piatta ottimizzata per le query di WooCommerce ha ridotto DRASTICAMENTE l’impatto degli ordini sulla performance.