15 Novembre 2024

Abbiamo Trovato e Risolto un Problema di Performance su SPOKI un plugin per WordPress

Come abbiamo identificato e risolto un grave problema di performance nel plugin SPOKI, migliorando drasticamente le prestazioni di un e-commerce durante il Black Friday.

Spoki

In occasione del Black Friday, uno dei periodi più critici dell’anno per i siti di e-commerce, ogni millisecondo conta. Le piattaforme devono essere pronte a gestire un carico eccezionale di traffico senza compromettere le prestazioni o l’esperienza utente. Recentemente, siamo stati coinvolti da un cliente per ottimizzare al massimo il suo sito WooCommerce in previsione dell’aumento di richieste. Durante questa operazione, abbiamo individuato e risolto un problema di performance legato al plugin SPOKI, una soluzione italiana per la gestione dei carrelli abbandonati e l’automazione delle vendite.

In questo articolo, vi raccontiamo il percorso che ci ha portato a individuare il problema, come lo abbiamo affrontato, e come questa ottimizzazione abbia migliorato le prestazioni complessive del sistema.

Cos’è SPOKI e a Cosa Serve?

SPOKI è una piattaforma sviluppata in Italia, pensata per aiutare gli e-commerce a migliorare le proprie performance di vendita grazie all’automazione e alla gestione ottimizzata dei carrelli abbandonati. Si tratta di una soluzione moderna e versatile, integrabile in WooCommerce, il sistema di e-commerce più popolare al mondo, e progettata per facilitare la connessione tra negozi online e clienti.

Una delle principali caratteristiche che distingue SPOKI è la sua capacità di automatizzare il recupero dei carrelli abbandonati. Quando un cliente aggiunge prodotti al carrello ma non completa l’acquisto, SPOKI invia notifiche automatiche per ricordare loro dell’ordine incompleto, utilizzando strategie mirate per aumentare la probabilità di conversione. Questo processo si basa su un’analisi intelligente del comportamento degli utenti, garantendo che le notifiche siano pertinenti e tempestive.

Spoki WhatsApp

Un’altra funzionalità di rilievo è l’integrazione con WhatsApp, un canale di comunicazione ormai imprescindibile per interagire con i clienti. SPOKI utilizza questa piattaforma per inviare messaggi diretti, notifiche di recupero carrelli, promozioni personalizzate e aggiornamenti relativi agli ordini. Questo approccio consente di instaurare un rapporto più diretto e personale con gli utenti, migliorando l’esperienza del cliente e aumentando il tasso di conversione.

Infine, SPOKI offre strumenti avanzati per l’ottimizzazione delle conversioni, combinando dati raccolti durante l’interazione con i clienti e funzionalità per automatizzare campagne di marketing. Il risultato è una piattaforma che non solo facilita il recupero delle vendite perse, ma contribuisce attivamente alla crescita complessiva delle performance del negozio online.

Tra le sue funzionalità principali ci sono:

  • Recupero dei carrelli abbandonati: SPOKI invia notifiche automatizzate ai clienti che hanno lasciato il sito senza completare l’acquisto, incentivandoli a tornare.
  • Integrazione con WhatsApp: La piattaforma sfrutta il popolare canale di messaggistica per interagire con i clienti in tempo reale.
  • Ottimizzazione delle conversioni: Attraverso un mix di strumenti e dati, SPOKI aiuta gli store online a massimizzare le vendite.

SPOKI è progettato per integrarsi con WooCommerce, il sistema di e-commerce più utilizzato al mondo, ed è particolarmente apprezzato per la sua facilità d’uso e per la sua capacità di aumentare il tasso di conversione dei negozi online.

Tuttavia, come ogni software, SPOKI deve affrontare le sfide che derivano da ambienti ad alto traffico, specialmente durante eventi di vendita come il Black Friday.

Perché Scegliere SPOKI?

SPOKI rappresenta una scelta ideale per chi gestisce un negozio online e desidera migliorare le proprie performance senza dover affrontare complessità tecniche. Una delle sue caratteristiche distintive è la semplicità d’uso, che la rende adatta sia a chi è alle prime armi con l’e-commerce, sia a professionisti esperti. Grazie a un’interfaccia intuitiva e a una configurazione rapida, SPOKI consente di implementare strumenti avanzati come il recupero dei carrelli abbandonati e le campagne di automazione senza necessità di interventi tecnici complessi.

ROAS SPoki

Impatto Immediato sulle Vendite

Uno dei principali punti di forza di SPOKI è il suo impatto immediato sulle vendite. La piattaforma è progettata per generare risultati tangibili in tempi brevi, grazie alla sua capacità di analizzare il comportamento degli utenti e intervenire in modo mirato. Ad esempio, l’invio tempestivo di notifiche personalizzate ai clienti che hanno abbandonato il carrello può riportare in negozio una percentuale significativa di utenti, aumentando il tasso di conversione in modo diretto e misurabile.

Progettata per il Mercato Italiano ed internazionale

Essendo un prodotto sviluppato in Italia, SPOKI è particolarmente adatta agli e-commerce locali, comprendendone le dinamiche, le esigenze e le peculiarità. Questa conoscenza del mercato si traduce in funzionalità progettate per rispondere a sfide specifiche, come la gestione di normative locali sulla privacy o l’adattamento delle campagne di comunicazione alle abitudini di consumo italiane ma anche internazionali.

La Sfida del Black Friday ed un Carico Anomalo sul Database

In vista del Black Friday, uno dei periodi più critici per gli e-commerce, un nostro cliente con un negozio WooCommerce di grandi dimensioni ci ha chiesto di verificare che la sua piattaforma fosse ottimizzata per affrontare l’imminente picco di traffico. Si trattava di un sito con un alto volume di prodotti e una vasta base di clienti, già ben configurato con diverse ottimizzazioni per la gestione delle prestazioni. Tuttavia, durante i test preliminari, abbiamo notato un comportamento anomalo: il carico del server era insolitamente elevato, con picchi che superavano il livello accettabile per garantire un’esperienza fluida agli utenti.

La situazione richiedeva un’indagine approfondita. Abbiamo iniziato analizzando i log del server e monitorando le risorse del database per individuare eventuali colli di bottiglia. È stato allora che abbiamo scoperto un pattern ricorrente: una query SQL generata dal plugin SPOKI che stava consumando una quantità sproporzionata di risorse.

La query problematica era la seguente:

SELECT COUNT(*) FROM wp_spoki_setting

Questa chiamata, eseguita ripetutamente durante il processo di inizializzazione del plugin, si è rivelata essere la causa principale del sovraccarico. SPOKI, utilizzato dal cliente per gestire i carrelli abbandonati e automatizzare le interazioni con i clienti, accedeva a una tabella specifica del database (wp_spoki_setting) per verificare la presenza di dati di configurazione.

L’Impatto sul Sistema

La query SELECT COUNT(*), che serve a contare tutti i record presenti nella tabella, può sembrare innocua su database di piccole dimensioni. Tuttavia, nel caso specifico del nostro cliente, la tabella wp_spoki_setting conteneva circa 14 milioni di record, a causa dell’elevato volume di attività generate dall’e-commerce nel corso degli anni. Questo contesto ha trasformato una semplice operazione in un processo molto oneroso per il database.

Carico Database Query SPOKI

Ogni esecuzione della query richiedeva circa 1 secondo per essere completata. Sebbene possa sembrare un tempo contenuto, la ripetitività della chiamata durante le operazioni del plugin ha avuto un impatto cumulativo devastante. Durante i test, abbiamo osservato che la query veniva eseguita con una frequenza tale da generare un sovraccarico significativo sul server, portando il carico medio del sistema a valori superiori a 9, ben al di sopra della soglia raccomandata per un ambiente stabile.

Una query assolutamente inutile

Analizzando in dettaglio il codice del plugin SPOKI, abbiamo scoperto che la query problematica SELECT COUNT(*) FROM wp_spoki_setting aveva un ruolo sorprendentemente limitato: il suo unico scopo era quello di verificare la presenza di record nella tabella di configurazione del plugin (wp_spoki_setting). Non serviva realmente a ottenere il numero esatto di record, né era utilizzata per operazioni successive che richiedessero quel dato specifico.

Questa query, quindi, non solo era eccessivamente pesante rispetto al suo scopo, ma risultava anche totalmente ridondante. Per stabilire la presenza di dati in una tabella, non è necessario contare tutti i record, soprattutto in un contesto in cui il numero totale può superare milioni di righe, come nel caso del nostro cliente. Tale approccio era particolarmente inefficiente e generava un impatto significativo sul database, con un dispendio di risorse sproporzionato rispetto alla sua utilità.

L’utilizzo di SELECT COUNT(*) è giustificato solo quando si ha bisogno di un conteggio accurato dei record per fini statistici o operazioni successive, ma non era questo il caso. SPOKI richiedeva semplicemente un controllo booleano, ovvero verificare se nella tabella erano presenti uno o più record, senza alcuna necessità di conoscerne la quantità. La motivazione era atta a verificare solamente se fosse stato installato correttamente e fosse presente la tabella come possiamo vedere dal codice PHP di seguito che potete verificare in /wp-content/plugins/spoki/modules/abandoned-carts/spoki-abandoned-carts-db.php.

public function init_tables()
{
    global $wpdb;
    $spoki_setting_tb = $wpdb->prefix . SPOKI_SETTING_TABLE;

    if ($wpdb->get_var("SHOW TABLES LIKE '$spoki_setting_tb'") !== $spoki_setting_tb) {
        error_log('Error: Table does not exist: ' . $spoki_setting_tb);
        return;
    }

    $meta_count = $wpdb->get_var("SELECT COUNT(*) FROM $spoki_setting_tb");
    if ((!$meta_count)) {
        $env_file_path = SPOKI_DIR . '/.env';

        if (file_exists($env_file_path)) {
            $meta_data = parse_ini_file($env_file_path);
            if ($meta_data === false) {
                error_log('Error: Failed to parse .env file at ' . $env_file_path);
                return;
            }
            $meta_data["access_token"] = md5(uniqid(wp_rand(), true));
            foreach ($meta_data as $meta_key => $meta_value) {
                $wpdb->insert(
                    $spoki_setting_tb,
                    array('meta_key' => $meta_key, 'meta_value' => $meta_value),
                    array('%s', '%s')
                );
            }
        } else {
            error_log('Warning: .env file not found at ' . $env_file_path);
        }
    }
}

Questo ha evidenziato non solo un’opportunità di ottimizzazione, ma anche un’implementazione poco attenta alle best practice, che può diventare problematica in contesti ad alto traffico o su database di grandi dimensioni.

 

La Soluzione: Un Approccio Più Efficiente nella query SQL

Per risolvere il problema, abbiamo modificato il codice sostituendo la query SELECT COUNT(*) con una versione più leggera e ottimizzata:

$meta_count = $wpdb->get_var("SELECT 1 FROM $spoki_setting_tb LIMIT 1");

La nuova query verifica semplicemente la presenza di almeno un record nella tabella, senza dover contare tutti i record. Grazie all’uso di LIMIT 1, la query si ferma non appena trova il primo record, riducendo drasticamente il carico sul database.

I Risultati: Prestazioni Migliorate

Dopo aver applicato questa modifica, abbiamo eseguito una serie di test per valutare l’impatto sulle prestazioni. Ecco i risultati:

  • Tempo di esecuzione della query: Ridotto da circa 1 secondo a pochi millisecondi.
  • Carico medio del server: Diminuito da 9 a 1,4.
  • Reattività generale del sito: Migliorata in modo significativo, anche sotto carico elevato.

Load Average SPOKI

Questa ottimizzazione non solo ha ridotto il tempo di risposta del database, ma ha anche reso l’intero sistema più stabile e pronto per gestire l’aumento di traffico del Black Friday.

Perché Questa Ottimizzazione È Importante

Gli eventi di vendita come il Black Friday rappresentano momenti cruciali per qualsiasi e-commerce. Durante questi periodi, il traffico sui siti può aumentare esponenzialmente, mettendo a dura prova l’intera infrastruttura tecnica. In questo contesto, anche un piccolo collo di bottiglia, come una query inefficiente o un codice non ottimizzato, può avere ripercussioni devastanti: rallentamenti, downtime, o, peggio ancora, carrelli abbandonati a causa di una scarsa esperienza utente.

L’ottimizzazione della query SQL nel plugin SPOKI, che abbiamo effettuato per il nostro cliente, evidenzia alcune lezioni fondamentali per chi gestisce piattaforme e-commerce, specialmente nei periodi di alta intensità.

Monitorare il Carico È Fondamentale

Un sito che sembra funzionare bene in condizioni normali può nascondere insidie che emergono solo sotto stress. I test di carico e il monitoraggio delle risorse sono strumenti indispensabili per identificare colli di bottiglia prima che diventino un problema. Nel nostro caso, la query problematica non avrebbe mai sollevato allarmi durante l’utilizzo standard, ma con l’avvicinarsi del Black Friday e l’aumento delle richieste simultanee, il suo impatto negativo è diventato evidente.

Analizzare Attentamente le Query SQL

Le query SQL sono uno degli elementi più critici per la performance di un sito e-commerce. Anche una singola query inefficiente può rallentare l’intero sistema, specialmente quando opera su database di grandi dimensioni. L’abitudine di usare query come SELECT COUNT(*), apparentemente innocue, può trasformarsi in un problema significativo in contesti ad alto traffico. Analizzare ogni query per garantire che sia ottimizzata e necessaria è essenziale per evitare sprechi di risorse.

Le Ottimizzazioni Mirate Fanno la Differenza

Le modifiche che abbiamo apportato al plugin SPOKI sono un esempio perfetto di come un piccolo intervento mirato possa portare a miglioramenti significativi. Sostituire la query inefficiente con una più leggera ha ridotto drasticamente il carico sul database, migliorando le prestazioni complessive del sito. Questo tipo di intervento è particolarmente utile perché non richiede cambiamenti radicali o costosi, ma si concentra su aree specifiche che hanno un impatto elevato.

Ridurre i Rischi Durante i Picchi di Traffico

Eventi come il Black Friday non perdonano errori. I clienti si aspettano un’esperienza veloce e senza intoppi, e un sito lento può rapidamente perdere credibilità e vendite. Ottimizzare ogni aspetto della piattaforma prima di questi eventi non è solo una buona pratica, ma una necessità. Nel nostro caso, l’ottimizzazione del plugin SPOKI ha evitato problemi che avrebbero potuto compromettere l’intera operazione del cliente.

Garantire la Scalabilità a Lungo Termine

Le ottimizzazioni non riguardano solo la gestione dell’emergenza: servono anche a garantire che il sistema possa crescere nel tempo senza problemi. Una query inefficiente potrebbe non essere un problema oggi, ma lo diventerà inevitabilmente con l’aumento del traffico e del volume di dati. Intervenire in anticipo significa prepararsi a gestire non solo il Black Friday, ma anche qualsiasi altra sfida futura.

Un Approccio Multidisciplinare

Sebbene il nostro core business sia l’hosting e la sistemistica avanzata, ci sono situazioni in cui è necessario andare oltre il nostro ruolo tradizionale per garantire la massima efficienza ai clienti. La risoluzione della problematica legata al plugin SPOKI ne è un esempio: non ci siamo limitati a osservare un’anomalia di carico sul server, ma abbiamo intrapreso un vero e proprio percorso di reverse engineering, partendo dai sintomi per arrivare alla radice del problema.

L’indagine è iniziata analizzando i dati grezzi sul carico del server, approfondendo poi il comportamento del database per individuare query anomale. Una volta identificata la query problematica, siamo andati ancora più a fondo, esaminando il codice sorgente del plugin per comprendere esattamente il motivo della sua inefficienza. Questo processo richiede competenze trasversali, che spaziano dall’analisi delle prestazioni del database alla comprensione del linguaggio PHP, fino alla capacità di valutare l’impatto computazionale delle operazioni.

In questi casi, è fondamentale sapersi “sporcare le mani”: non basta diagnosticare un problema, bisogna intervenire direttamente sul codice quando possibile, sempre rispettando l’integrità del software. Questo approccio multidisciplinare, che combina conoscenze di sistemistica, calcolo, complessità algoritmica e sviluppo, è ciò che ci permette di offrire soluzioni complete ed efficaci, anche in scenari complessi. La tecnologia non ha compartimenti stagni, e spesso la chiave per risolvere un problema risiede nell’unione di competenze che vanno oltre il nostro ambito principale.

La segnalazione all’azienda produttrice

Dopo aver completato i nostri test e verificato l’impatto positivo dell’ottimizzazione, ci siamo subito attivati per segnalare la problematica all’azienda produttrice di SPOKI. L’indomani, abbiamo inviato una dettagliata email al loro supporto tecnico, spiegando il problema riscontrato e fornendo la soluzione implementata. Nel messaggio, abbiamo sottolineato l’importanza di includere questa ottimizzazione nella prossima release del plugin, auspicando che la modifica possa beneficiare tutti gli utenti di SPOKI, soprattutto in contesti ad alto traffico come il Black Friday.

SPOKI---WhatsApp-Notification-Plug-in-for-WooCommerce

Oltre alla comunicazione diretta via email, abbiamo aperto anche una richiesta di supporto ufficiale nella directory dei plugin WordPress, condividendo la nostra analisi e suggerimento di ottimizzazione. Il thread è consultabile pubblicamente all’indirizzo: https://wordpress.org/support/topic/optimization-suggestion-for-spoki-plugin-to-improve-woocommerce-performance/. Questo passo è stato fatto non solo per segnalare la questione agli sviluppatori, ma anche per mettere a disposizione della comunità un caso studio che possa aiutare altri utenti a riconoscere e risolvere problematiche simili.

Con questa doppia azione, abbiamo voluto assicurarci che la problematica non solo venga presa in carico dall’azienda produttrice, ma che possa generare un impatto positivo a lungo termine sull’intera base utenti del plugin.

Conclusioni e Suggerimenti

Questa esperienza dimostra che ogni dettaglio conta quando si tratta di ottimizzare un e-commerce. Non basta concentrarsi sulle aree visibili come il frontend o le campagne di marketing: anche il backend e il database devono essere efficienti e pronti a gestire carichi elevati. Investire in ottimizzazioni mirate e test regolari non solo migliora le prestazioni, ma garantisce anche che l’esperienza utente resti impeccabile, indipendentemente dalle sfide. E come dimostra il caso del nostro cliente, queste ottimizzazioni possono fare la differenza tra un Black Friday di successo e un’occasione mancata.

La nostra analisi ha messo in luce come anche strumenti avanzati come SPOKI possano trarre beneficio da una revisione delle performance, soprattutto in situazioni di traffico elevato. Abbiamo condiviso la nostra soluzione con il team di sviluppo di SPOKI, suggerendo di integrare questa modifica nelle versioni future del plugin.

Per chi gestisce un e-commerce, ecco i nostri consigli:

  1. Prepararsi in anticipo per i picchi di traffico: Pianificate test di carico e ottimizzazioni prima degli eventi di vendita.
  2. Analizzare i plugin installati: Anche i migliori plugin possono nascondere problemi di performance.
  3. Collaborare con esperti: Rivolgersi a un team specializzato può fare la differenza nei momenti critici.

Siamo orgogliosi di aver aiutato il nostro cliente a superare questa sfida e di aver contribuito a migliorare le performance di SPOKI. Se anche voi avete bisogno di supporto per ottimizzare il vostro sito o volete prepararvi per il prossimo evento di vendita, contattateci. Siamo qui per assicurarci che la vostra piattaforma sia sempre al massimo delle sue prestazioni.

 

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto