Le migliori lezioni apprese durante l'ottimizzazione di WordPress (per il successo dei clienti)

Pubblicato: 2022-09-15
Sommario nascondere
1. Cosa mi ha incoraggiato a parlare al WordCamp Mumbai?
2. I tre problemi che mi hanno dato notti insonni (con soluzioni e lezioni apprese da loro)
2.1. Ridurre il tempo di caricamento della pagina da 3 minuti a millisecondi...
2.1.1. Problema
2.1.2. Soluzione
2.1.3. Migliorare la soluzione
2.2. In che modo un errore di timeout è diventato la caratteristica più venduta del nostro plugin?
2.2.1. Problema
2.2.2. Soluzione
2.2.3. Migliorare la soluzione
2.3. In che modo gli ambienti di hosting condiviso ci hanno costretto a riscrivere il nostro plugin?
2.3.1. Problema
2.3.2. Soluzione
3. Riepilogo lezioni
4. Qual è la tua scelta?

Quand'è 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 .

Ottimizzazione di WordPress
Buoni intelligenti Vecchio codice

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.

Ottimizzazione di WordPress
Buoni intelligenti Nuovo codice

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.

Ottimizzazione di WordPress

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.

Ottimizzazione di WordPress
Richieste Ajax di aggiornamento batch di Smart Manager

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.

Ottimizzazione di WordPress
Post di WordPress Postmeta ERD

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.

Ottimizzazione di WordPress
Tabella riepilogativa di Smart Reporter

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.