15 novembre 2024

Nous avons trouvé et résolu un problème de performances sur SPOKI, un plugin WordPress

Comment nous avons identifié et résolu un grave problème de performances dans le plugin SPOKI, améliorant considérablement les performances d'un site de commerce électronique pendant le Black Friday.

Spoki

Lors du Black Friday, l’une des périodes les plus critiques de l’année pour les sites e-commerce, chaque milliseconde compte. Les plateformes doivent être prêtes à gérer une charge de trafic exceptionnelle sans compromettre les performances ou l'expérience utilisateur. Récemment, nous avons été sollicités par un client pour optimiser au maximum son site WooCommerce en prévision de l'augmentation des demandes. Lors de cette opération, nous avons identifié et résolu un problème de performances lié au plugin SPOKI, une solution italienne de gestion des paniers abandonnés et d'automatisation des ventes.

Dans cet article, nous vous expliquons le chemin qui nous a amené à identifier le problème, comment nous l'avons résolu et comment cette optimisation a amélioré les performances globales du système.

Qu’est-ce que SPOKI et à quoi sert-il ?

SPOKI est une plateforme développée en Italie, conçue pour aider les entreprises de commerce électronique à améliorer leurs performances commerciales grâce à l'automatisation et à la gestion optimisée des paniers abandonnés. Il s'agit d'une solution moderne et polyvalente, intégrable à WooCommerce, le système de commerce électronique le plus populaire au monde, et conçue pour faciliter la connexion entre les boutiques en ligne et les clients.

L'une des principales caractéristiques qui distingue SPOKI est sa capacité à automatiser la récupération des paniers abandonnés. Lorsqu'un client ajoute des produits à son panier mais ne finalise pas l'achat, SPOKI envoie des notifications automatiques pour lui rappeler la commande incomplète, en utilisant des stratégies ciblées pour augmenter la probabilité de conversion. Ce processus repose sur une analyse intelligente du comportement des utilisateurs, garantissant que les notifications sont pertinentes et opportunes.

Spoki WhatsApp

Une autre caractéristique notable est laintégration avec WhatsApp, un canal de communication désormais incontournable pour interagir avec les clients. SPOKI utilise cette plateforme pour envoyer des messages directs, des notifications de récupération de panier, des promotions personnalisées et des mises à jour de commandes. Cette approche vous permet d'établir une relation plus directe et personnelle avec les utilisateurs, améliorant ainsi l'expérience client et augmentant le taux de conversion.

Enfin, SPOKI propose des outils avancés pouroptimisation des conversions, combinant les données collectées lors des interactions avec les clients et des fonctionnalités pour automatiser les campagnes marketing. Le résultat est une plateforme qui non seulement facilite la récupération des ventes perdues, mais contribue activement à la croissance globale des performances de la boutique en ligne.

Parmi ses principales caractéristiques figurent :

  • Récupérateur des Carrelli Abbandonati : SPOKI envoie des notifications automatisées aux clients qui ont quitté le site sans finaliser leur achat, les encourageant à revenir.
  • Intégration WhatsApp : La plateforme exploite le canal de messagerie populaire pour interagir avec les clients en temps réel.
  • Optimisation des conversions : Grâce à une combinaison d'outils et de données, SPOKI aide les boutiques en ligne à maximiser leurs ventes.

SPOKI est conçu pour s'intégrer à WooCommerce, le système de commerce électronique le plus utilisé au monde, et est particulièrement apprécié pour sa facilité d'utilisation et sa capacité à augmenter le taux de conversion des boutiques en ligne.

Cependant, comme tout logiciel, SPOKI est confronté aux défis liés aux environnements à fort trafic, en particulier lors d'événements commerciaux comme le Black Friday.

Pourquoi choisir SPOKI ?

SPOKI représente un choix idéal pour ceux qui gèrent une boutique en ligne et souhaitent améliorer leurs performances sans avoir à faire face à des complexités techniques. L'une de ses particularités est la facilité d'utilisation, ce qui le rend adapté aussi bien à ceux qui débutent dans le commerce électronique qu'aux professionnels expérimentés. Grâce à une interface intuitive et une configuration rapide, SPOKI vous permet de mettre en œuvre des outils avancés tels que la récupération des paniers abandonnés et des campagnes d'automatisation sans avoir besoin d'interventions techniques complexes.

ROAS SPoki

Impact immédiat sur les ventes

L'un des principaux atouts de SPOKI réside dans son impact immédiat sur les ventes. La plateforme est conçue pour générer des résultats tangibles dans un court laps de temps, grâce à sa capacité à analyser le comportement des utilisateurs et à intervenir de manière ciblée. Par exemple, l'envoi de notifications personnalisées en temps opportun aux clients qui ont abandonné leur panier peut ramener un pourcentage important d'utilisateurs au magasin, augmentant ainsi le taux de conversion de manière directe et mesurable.

Conçu pour le marché italien et international

Étant un produit développé en Italie, SPOKI est particulièrement adapté au commerce électronique local, en comprenant sa dynamique, ses besoins et ses particularités. Cette connaissance du marché se traduit par des fonctionnalités conçues pour répondre à des défis spécifiques, comme la gestion des réglementations locales en matière de confidentialité ou l'adaptation des campagnes de communication aux habitudes des consommateurs italiens mais aussi internationaux.

Le défi du Black Friday et une charge anormale de la base de données

En vue du Black Friday, l'une des périodes les plus critiques pour le e-commerce, un de nos clients possédant une grande boutique WooCommerce nous a demandé de vérifier que sa plateforme était optimisée pour faire face au pic de trafic imminent. Il s'agissait d'un site avec un volume de produits élevé et une large base de clients, déjà bien configuré avec plusieurs optimisations de gestion des performances. Cependant, lors des tests préliminaires, nous avons remarqué un comportement anormal : la charge du serveur était inhabituellement élevée, avec des pics dépassant le niveau acceptable pour garantir une expérience fluide aux utilisateurs.

La situation nécessitait une enquête approfondie. Nous avons commencé par analyser les journaux du serveur et surveiller les ressources de la base de données pour détecter les goulots d'étranglement. C'est alors que nous avons découvert un schéma récurrent : une requête SQL générée par le plugin SPOKI qui consommait une quantité disproportionnée de ressources.

La requête problématique était la suivante :

SELECT COUNT(*) FROM wp_spoki_setting

Cet appel, exécuté à plusieurs reprises pendant le processus d’initialisation du plugin, s’est avéré être la cause première de la surcharge. SPOKI, utilisé par le client pour gérer les paniers abandonnés et automatiser les interactions client, a accédé à une table spécifique dans la base de données (wp_spoki_setting) pour vérifier la présence de données de configuration.

L'impact sur le système

La requête SELECT COUNT(*), qui sert à compter tous les enregistrements de la table, peut sembler inoffensif sur de petites bases de données. Cependant, dans le cas spécifique de notre client, le tableau wp_spoki_setting il contenait environ 14 millions d'enregistrements, en raison du volume d'affaires élevé généré par le commerce électronique au fil des années. Ce contexte a transformé une opération simple en un processus très fastidieux pour la base de données.

Charger la requête de base de données SPOKI

Chaque exécution de requête a pris environ 1 selon à compléter. Même si cela peut sembler peu de temps, la répétitivité de l’appel lors des opérations du plugin a eu un impact cumulatif dévastateur. Lors des tests, nous avons observé que la requête était exécutée suffisamment fréquemment pour générer un surcharge importante sur le serveur, portant la charge moyenne du système à des valeurs supérieures à 9, bien au-dessus du seuil recommandé pour un environnement stable.

Une requête absolument inutile

En analysant en détail le code du plugin SPOKI, nous avons découvert que la requête problématique SELECT COUNT(*) FROM wp_spoki_setting avait un rôle étonnamment limité : son seul but était de vérifier les enregistrements dans la table de configuration du plugin (wp_spoki_setting). Il n’était pas vraiment utilisé pour obtenir le nombre exact d’enregistrements, ni pour des opérations ultérieures nécessitant ces données spécifiques.

Cette question était donc non seulement excessivement lourde par rapport à son objectif, mais elle aboutissait également à totalement redondant. Pour établir la présence de données dans un tableau, il n'est pas nécessaire de compter tous les enregistrements, surtout dans un contexte où le nombre total peut dépasser des millions de lignes, comme dans le cas de notre client. Cette approche s'est révélée particulièrement inefficace et a généré un impact important sur la base de données, avec un gaspillage de ressources disproportionné par rapport à son utilité.

L'utilisation de SELECT COUNT(*) cela n'est justifié que lorsque vous avez besoin d'un décompte précis des enregistrements à des fins statistiques ou pour des opérations ultérieures, mais ce n'était pas le cas. SPOKI nécessitait simplement une vérification booléenne, c'est-à-dire vérifier si un ou plusieurs enregistrements étaient présents dans la table, sans avoir besoin de connaître leur quantité. La raison était de vérifier uniquement s'il avait été installé correctement et si le tableau était présent comme le montre le code PHP ci-dessous que vous pouvez enregistrer /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);
        }
    }
}

Cela a mis en évidence non seulement une opportunité d’optimisation, mais aussi une mise en œuvre peu attentive aux bonnes pratiques, ce qui peut devenir problématique dans des contextes à fort trafic ou sur des bases de données volumineuses.

 

La solution : une approche plus efficace des requêtes SQL

Pour résoudre le problème, nous avons modifié le code en remplaçant la requête SELECT COUNT(*) avec une version plus légère et optimisée :

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

La nouvelle requête recherche simplement au moins un enregistrement dans la table, sans avoir à compter tous les enregistrements. Grâce à l'utilisation de LIMIT 1, la requête s'arrête dès qu'elle trouve le premier enregistrement, ce qui réduit considérablement la charge sur la base de données.

Les résultats : des performances améliorées

Après avoir appliqué ce changement, nous avons effectué une série de tests pour évaluer l’impact sur les performances. Voici les résultats :

  • Temps d'exécution de la requête : Réduit d'environ 1 seconde à quelques millisecondes.
  • Charge moyenne du serveur : Diminué de 9 à 1,4.
  • Réactivité générale du site : Considérablement amélioré, même sous forte charge.

Charge moyenne SPOKI

Cette optimisation a non seulement réduit le temps de réponse de la base de données, mais a également rendu l'ensemble du système plus stable et prêt à gérer l'augmentation du trafic du Black Friday.

Pourquoi cette optimisation est importante

Les événements commerciaux comme le Black Friday représentent des moments cruciaux pour tout e-commerce. Pendant ces périodes, le trafic sur le site peut augmenter de façon exponentielle, mettant à rude épreuve l’ensemble de l’infrastructure technique. Dans ce contexte, même un petit goulot d'étranglement, comme une requête inefficace ou un code non optimisé, peut avoir des répercussions dévastatrices : ralentissements, temps d'arrêt ou, pire encore, paniers abandonnés en raison d'une mauvaise expérience utilisateur.

L'optimisation des requêtes SQL dans le plugin SPOKI, que nous avons réalisée pour notre client, met en évidence quelques enseignements clés pour les gestionnaires de plateformes de commerce électronique, notamment pendant les périodes de forte intensité.

Surveiller votre charge est fondamental

Un chantier qui semble bien fonctionner dans des conditions normales peut cacher des pièges qui n’apparaissent que sous pression. Les tests de charge et la surveillance des ressources sont des outils indispensables pour identifier les goulots d'étranglement avant qu'ils ne deviennent un problème. Dans notre cas, la requête problématique n’aurait jamais déclenché d’alarme lors d’une utilisation standard, mais à mesure que le Black Friday approchait et que les demandes simultanées augmentaient, son impact négatif est devenu évident.

Analysez soigneusement les requêtes SQL

Les requêtes SQL sont l'un des éléments les plus critiques pour la performance d'un site e-commerce. Même une seule requête inefficace peut ralentir l’ensemble du système, en particulier lorsqu’il fonctionne sur de grandes bases de données. L'habitude d'utiliser des requêtes comme SELECT COUNT(*), apparemment inoffensif, peut devenir un problème important dans des contextes à fort trafic. Analyser chaque requête pour s'assurer qu'elle est optimisée et nécessaire est essentiel pour éviter de gaspiller des ressources.

Les optimisations ciblées font la différence

Les modifications que nous avons apportées au plugin SPOKI sont un parfait exemple de la façon dont une petite intervention ciblée peut conduire à des améliorations significatives. Le remplacement de la requête inefficace par une requête plus légère a considérablement réduit la charge sur la base de données, améliorant ainsi les performances globales du site. Ce type d'intervention est particulièrement utile car il ne nécessite pas de changements radicaux ou coûteux, mais se concentre sur des domaines spécifiques qui ont un impact élevé.

Réduisez les risques pendant les pics de circulation

Des événements comme le Black Friday ne pardonnent pas les erreurs. Les clients s'attendent à une expérience rapide et fluide, et un site lent peut rapidement perdre en crédibilité et en ventes. Optimiser chaque aspect de la plateforme avant ces événements n’est pas seulement une bonne pratique, mais une nécessité. Dans notre cas, l'optimisation du plugin SPOKI a évité des problèmes qui auraient pu compromettre l'ensemble du fonctionnement du client.

Assurer une évolutivité à long terme

Les optimisations ne concernent pas seulement la gestion des urgences : elles servent également à garantir que le système puisse croître sans problème au fil du temps. Une requête inefficace n’est peut-être pas un problème aujourd’hui, mais elle le deviendra inévitablement à mesure que le trafic et le volume de données augmentent. Agir tôt signifie se préparer à faire face non seulement au Black Friday, mais également à tout autre défi à venir.

Une approche multidisciplinaire

Bien que notre activité principale soit l'hébergement et les systèmes avancés, il existe des situations où cela est nécessaire aller au-delà de notre rôle traditionnel pour garantir une efficacité maximale aux clients. La résolution du problème lié au plugin SPOKI en est un exemple : nous ne nous sommes pas limités à observer une anomalie de charge sur le serveur, mais nous avons entrepris un véritable chemin de ingénierie inverse, en partant des symptômes pour aller à la racine du problème.

L'enquête a commencé par l'analyse des données brutes de charge du serveur, puis par une analyse du comportement de la base de données pour identifier les requêtes anormales. Une fois que nous avons identifié la requête problématique, nous avons creusé encore plus profondément, en examinant le code source du plugin pour comprendre exactement pourquoi il était inefficace. Ce processus nécessite compétences transversales, allant de l'analyse des performances des bases de données à la compréhension du langage PHP, jusqu'à la capacité d'évaluer l'impact informatique des opérations.

Dans ces cas-là, il est essentiel de savoir « mettre la main à la pâte » : il ne suffit pas de diagnostiquer un problème, il faut intervenir directement sur le code lorsque cela est possible, en respectant toujours l'intégrité du logiciel. Cette approche multidisciplinaire, qui combine des connaissances en ingénierie des systèmes, en calcul, en complexité algorithmique et en développement, nous permet de proposer des solutions complètes et efficaces, même dans des scénarios complexes. La technologie n’a pas de compartiments étanches, et souvent la clé pour résoudre un problème réside dans la combinaison de compétences qui dépassent notre champ d'action principal.

Reporting à l'entreprise manufacturière

Après avoir terminé nos tests et vérifié l'impact positif de l'optimisation, nous avons immédiatement pris des mesures pour signaler le problème à l'entreprise manufacturière SPOKI. Le lendemain, nous avons envoyé un email détaillé à leur support technique, expliquant le problème rencontré et apportant la solution mise en œuvre. Dans le message, nous avons souligné l'importance d'inclure cette optimisation dans la prochaine version du plugin, en espérant que le changement profitera à tous les utilisateurs de SPOKI, notamment dans des contextes à fort trafic comme le Black Friday.

SPOKI ---WhatsApp-Notification-Plug-in-pour-WooCommerce

En plus de la communication directe par e-mail, nous avons également ouvert une demande d'assistance officielle dans le répertoire des plugins WordPress, partageant notre analyse et suggestion d'optimisation. Le fil de discussion est accessible au public à l'adresse : https://wordpress.org/support/topic/optimization-suggestion-for-spoki-plugin-to-improve-woocommerce-performance/. Cette étape a été prise non seulement pour signaler le problème aux développeurs, mais également pour mettre à la disposition de la communauté une étude de cas pouvant aider d'autres utilisateurs à reconnaître et à résoudre des problèmes similaires.

Avec cette double action, nous voulions nous assurer que le problème n'est pas seulement pris en charge par l'entreprise de fabrication, mais qu'il peut générer un impact positif à long terme sur l'ensemble de la base d'utilisateurs du plugin.

Conclusions et suggestions

Cette expérience montre que chaque détail compte lorsqu'il s'agit d'optimiser un e-commerce. Il ne suffit pas de se concentrer sur les domaines visibles comme le frontend ou les campagnes marketing : le backend et la base de données doivent également être efficaces et prêts à gérer des charges élevées. Investir dans des optimisations ciblées et des tests réguliers améliore non seulement les performances, mais garantit également que l'expérience utilisateur reste impeccable, quels que soient les défis. Et comme le démontre le cas de notre client, ces optimisations peuvent faire la différence entre un Black Friday réussi et une opportunité manquée.

Notre analyse a mis en évidence comment même des outils avancés comme SPOKI peuvent bénéficier d'une évaluation des performances, en particulier dans les situations à fort trafic. Nous avons partagé notre solution avec l'équipe de développement SPOKI, en suggérant d'intégrer ce changement dans les futures versions du plugin.

Pour ceux qui gèrent un e-commerce, voici nos conseils :

  1. Préparez-vous à l’avance aux pics de trafic : Planifiez des tests de charge et des optimisations avant les événements de vente.
  2. Analysez les plugins installés : Même les meilleurs plugins peuvent cacher des problèmes de performances.
  3. Collaborez avec des experts : Se tourner vers une équipe spécialisée peut faire la différence dans les moments critiques.

Nous sommes fiers d'avoir aidé notre client à surmonter ce défi et d'avoir contribué à améliorer les performances de SPOKI. Si vous avez également besoin d'accompagnement pour optimiser votre site ou souhaitez préparer votre prochain événement commercial, Contactez nous. Nous sommes là pour garantir que votre plateforme fonctionne toujours au maximum de ses performances.

 

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de The FreeBSD Foundation ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt. Oracle Corporation détient les droits sur Oracle®, MySQL® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; REDIS® est une marque déposée de Redis Labs Ltd. F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB. Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited. Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV. Hetzner Online GmbH détient les droits sur Hetzner® ; OVHcloud est une marque déposée d'OVH Groupe SAS ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Facebook, Inc. détient les droits sur Facebook®. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente en aucune manière aucune de ces entités. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italie.

JUSTE UN MOMENT !

Souhaitez-vous voir comment votre WooCommerce fonctionne sur nos systèmes sans avoir à migrer quoi que ce soit ? 

Entrez l'adresse de votre site WooCommerce et vous obtiendrez une démonstration navigable, sans avoir à faire absolument quoi que ce soit et entièrement gratuite.

Non merci, mes clients préfèrent le site lent.
Retour en haut de page