Le migliori lezioni apprese durante l'ottimizzazione di WordPress (per il successo dei clienti)
Pubblicato: 2022-09-15Quand'è stata l'ultima volta che hai avuto un momento nuvola nove?
Passare la scuola a pieni voti.. o quando la tua ragazza/fidanzato ha accettato la tua proposta?
Ho avuto una nuvola nove momento due settimane fa! Stavo parlando al WordCamp Mumbai 2017, il più grande WordCamp dell'India.
L'argomento era qualcosa che mi stava a cuore e qualcosa di cui mi occupo ogni giorno: le lezioni apprese ottimizzando WordPress per il successo dei clienti.
Riguarda i problemi che ho dovuto affrontare con i database WordPress di grandi dimensioni e il modo in cui li ho affrontati.
Cosa mi ha incoraggiato a parlare al WordCamp Mumbai?
Lo sviluppo di un plugin per WordPress è un'ottima esperienza di apprendimento. Puoi estendere un framework eccellente, concentrarti sulla scrittura di codice che risolva i problemi dei clienti e lavorare con ottimi membri del team.
In StoreApps, gli sviluppatori non solo scrivono codice, ma supportano anche i clienti. Risolvere le domande dei clienti mi ha dato alcune delle lezioni più importanti.
Quindi tutto questo è la mia routine quotidiana, ed è piuttosto eccitante.
Ma sai cosa c'è di più eccitante per me? Lavorare con database di grandi dimensioni e risolvere problemi di database complessi!
I nostri plugin sono utilizzati da più di 35000 utenti. E ho visto molte sfide lavorando con grandi negozi WooCommerce e popolari siti WordPress.
Per fortuna, sono stato in grado di risolvere queste sfide e ho imparato molto.
Ma aspetta, proprio come me, ci sarebbero centinaia di altri sviluppatori che affrontano problemi simili lavorando con WordPress e WooCommerce.
Così ho deciso di condividere le mie lezioni con gli altri.
E quale piattaforma migliore di un'opportunità di parlare al più grande WordCamp dell'India!
I tre problemi che mi hanno dato notti insonni (con soluzioni e lezioni apprese da loro)
Infine, ecco i tre problemi di cui stavo parlando. Quindi iniziamo con loro uno per uno.
Ridurre il tempo di caricamento della pagina da 3 minuti a millisecondi...
Problema
Ho affrontato una situazione con il plug-in Smart Coupons in cui una semplice funzionalità di visualizzazione dei coupon nelle pagine cruciali del negozio (es. carrello, pagamento e pagine del mio account) ha bloccato il processo di pagamento.
Smart Coupons è un plug-in per la creazione e la gestione di coupon e buoni regalo in blocco per un negozio WooCommerce.
Soluzione
Ora, l'utilizzo di WP Query avrebbe comportato più JOIN poiché la visualizzazione dei coupon disponibili per un utente specifico richiede la valutazione di più metacondizioni.
Quindi, invece di utilizzare il modo ideale per interrogare il database, ad esempio WP Query, ho scritto query SQL personalizzate .
Inoltre, nelle query personalizzate, quello che ho fatto è stato:
- Invece di controllare tutte le meta condizioni in una singola query MySQL, ho semplicemente valutato la prima meta condizione
- Successivamente, ho archiviato l'elenco separato da virgole di post_ids (ID coupon) nella tabella delle opzioni
- E poi, ho semplicemente mappato lo stesso set di post_id valutando ciascuna delle altre meta condizioni
L'ho fatto fino a quando non ho ottenuto un set finale di post_ids che doveva essere visualizzato per l'utente specifico.
Migliorare la soluzione
Questo ha risolto i problemi di caricamento della pagina. Tuttavia, per ottenere il caricamento della pagina sotto i millisecondi, come suggerito dal nostro amico, ho dovuto ridefinire il problema.
Invece di mostrare tutti i coupon per i quali l'utente ha diritto,
Ho impostato un limite al numero di coupon che sarebbero stati mostrati agli utenti nelle pagine di carrello e checkout.
In che modo un errore di timeout è diventato la caratteristica più venduta del nostro plugin?
Problema
Per l'elaborazione di un enorme aggiornamento del database, avevo scritto query personalizzate poiché l'utilizzo delle funzioni principali di WordPress sarebbe probabilmente diventato un enorme sovraccarico.
Esempio: se si deve ridurre del 40% i prezzi di tutti i prodotti nel proprio negozio, è sufficiente selezionare "Prezzo", "Riduci del 40%" e premere il pulsante di aggiornamento. Questo è facilmente possibile utilizzando il nostro plug-in Smart Manager, progettato per rendere più semplici gli aggiornamenti in blocco sui tuoi negozi WooCommerce.
Tuttavia, il processo di aggiornamento batch ha iniziato a bloccarsi e a fornire errori di timeout ogni volta che qualcuno tentava di aggiornare i prodotti 1k o l'intero negozio alla volta .
Inizialmente ho iniziato a cercare di ottimizzare le query, ma ciò non ha aiutato.
La mia situazione era simile a quella di un concorrente del castello di Takeshi. Non importa quanto ci provassi, continuavo a cadere in acqua.
Soluzione
Si dice che a volte devi uscire dal problema e prendere una visione a volo d'uccello del problema per trovare la causa esatta.
Ho fatto lo stesso e ho capito che il vero problema era
non a livello di query ma a livello di richiesta .
Quindi, quello che ho fatto è stato invece di una singola richiesta che esegue tutti gli aggiornamenti, ho suddiviso lo stesso in più chiamate AJAX successive facendo un batch più piccolo di aggiornamenti e che ha completamente eliminato gli errori di timeout.
Migliorare la soluzione
Ora, questo approccio di scomposizione di una singola richiesta in più richieste AJAX più piccole non solo ha risolto l'errore di timeout, ma ha anche migliorato l'esperienza utente di aggiornamento batch .
Ora il responsabile del negozio veniva aggiornato sullo stato di avanzamento dell'aggiornamento, il che ha semplicemente aumentato la loro fiducia nel prodotto.
Inoltre, lo stesso approccio ha consentito a Smart Manager di gestire gli aggiornamenti batch per il negozio WooCommerce di qualsiasi forma e dimensione e ha reso Smart Manager uno dei plugin più venduti di StoreApps.
In che modo gli ambienti di hosting condiviso ci hanno costretto a riscrivere il nostro plugin?
Problema
Per qualsiasi plug-in di segnalazione è fondamentale fornire non solo rapporti accurati ma rapidi delle statistiche. Ora, ottenere statistiche sui rapporti richiedeva più query che coinvolgevano l' unione di 2 principali tabelle di WordPress, ovvero post e postmeta.
Come già visto sopra, i JOIN sono così costosi .
In Smart Reporter (la nostra soluzione di reporting per WooCommerce), mostravamo 20 diverse statistiche di reporting in una singola visualizzazione della pagina e anche quella al caricamento della pagina.
Soluzione
Quindi, ho seguito lo stesso approccio seguito dalla maggior parte delle soluzioni di reporting, ovvero la creazione di una tabella di riepilogo, ovvero una tabella personalizzata a struttura piatta.
Questa tabella conterrebbe un riepilogo di tutti i dati richiesti dal plug-in e quindi eliminerebbe l'uso dei join e migliorerebbe i tempi di caricamento della pagina.
Inoltre, per mantenere aggiornate queste tabelle di riepilogo, abbiamo utilizzato azioni e filtri di WordPress.
Riepilogo lezioni
- Segui le migliori pratiche il più possibile
- Nessuna query in loop
- Evita grandi join complessi
- Fai di più a livello MySQL che a livello PHP
- Approfondisci il codice
- Riepilogo / tabelle personalizzate / temporanee
- Attenzione alla UX: reattività, notifiche...
- Stai risolvendo il problema giusto?
Qual è la tua scelta?
Sono sicuro che hai affrontato alcuni problemi enormi e trovato soluzioni ad esso. Fatecelo sapere nella nostra sezione commenti qui sotto. Sarebbe davvero prezioso per i lettori.