Mise à l'échelle d'une boutique WooCommerce à volume élevé avec Enterprise Search

Publié: 2022-04-06

Nous avons entendu les murmures. "WordPress et les solutions de commerce comme WooCommerce n'ont tout simplement pas été conçues pour les méga-magasins à volume élevé avec des catalogues de produits approfondis."

Mais est-ce que cette réalité ou juste une perception dépassée ne vaut pas la peine d'y prêter attention ?

Nous croyons que c'est ce dernier. La clé pour les marques de commerce qui souhaitent innover rapidement, faire gagner du temps et de l'argent à leurs clients et débloquer des solutions de commerce faciles à utiliser comme WooCommerce à grande échelle - disons, à l'échelle d' un million de produits en stock - est via Enterprise Search, développé par WordPress VIP.

Pour le prouver, nous avons relevé le défi dans le laboratoire WordPress VIP, en concevant et en testant sous contrainte une boutique WooCommerce à volume élevé avec un stock dans plusieurs langues, catégories et des dizaines d'attributs. Découvrez ce que nous avons appris.

Défis des magasins WooCommerce à volume élevé

D'après notre expérience, plus il y a de données dans une base de données MySQL, plus il devient difficile de les rechercher. Certes, afficher un catalogue de plus d'un million de produits et faciliter la navigation des clients est un défi de taille.

Pour commencer, nous avons décidé d'utiliser les méthodes internes de WooCommerce pour générer des produits avec suffisamment de taxonomies et de relations de termes pour ressembler à une véritable boutique de commerce électronique.

Un package qui a aidé était WooCommerce Smooth Generator. Cela nous a permis d'utiliser l'architecture évolutive WordPress VIP Cron, qui nous a aidés à décupler la génération de produits WooCommerce. Bonne nouvelle : en seulement 48 heures, nous avions un magasin avec un volume élevé de données, et ces 1 millions de produits, à tester.


Conseil technique : pour accélérer le processus d'importation initial, nous avons désactivé le processus de recomptage des termes et ne l'avons réexécuté qu'à l'étape finale :

 add_filter('woocommerce_product_recount_terms', '__return_false');

Pour ce test, nous avons utilisé la dernière version de WooCommerce (version 6.1.1) et le thème Storefront par défaut.

En évaluant le frontend, nous avons commencé à remarquer des retards importants dans le rendu des pages - les requêtes lentes MySQL en étaient la cause première. Les principaux domaines touchés concernaient :

  • recherche de produits recherche de produits
  • Pages de liste de produits de catégorie
  • Recherche filtrée

Entrez Enterprise Search - rapide, facile, sécurisé

Il était clair que l'un de nos produits les plus récents, Enterprise Search, serait essentiel pour résoudre ces problèmes de manière évolutive. Nous avons constaté que cela aidait notre magasin WooCommerce à volume élevé à fonctionner sans modifications majeures du code ou du schéma de base de données.

Tout d'abord, un peu de contexte : Enterprise Search a été conçu dès le départ pour les besoins des entreprises clientes. C'est ultra-rapide, même lorsque le volume de la base de données et du site évolue. Basé sur Elasticsearch, il donne des résultats précis et quasi instantanés, même sur des millions de contenus.

Parce qu'il est directement intégré à VIP Cloud sans qu'aucun service externe ne soit requis, Enterprise Search indexe immédiatement les nouveaux éléments de contenu, faisant rapidement apparaître les résultats les plus récents et les plus pertinents.

Nous avons activé Enterprise Search et exécuté un index initial sur les données produit dont nous disposions, ce qui nous a permis de stocker horizontalement les données de notre base de données.


Conseil technique : Activer Enterprise Search est aussi simple que :

 define( 'VIP_ENABLE_VIP_SEARCH', true ); // Enables Enterprise Search. define( 'VIP_ENABLE_VIP_SEARCH_QUERY_INTEGRATION', true ); // Integrates search queries with Enterprise Search.

Alléger la charge en déchargeant les requêtes vers Enterprise Search

Sachant que n'importe quel WP_Query peut être déchargé vers Enterprise Search, nous avons commencé à rechercher les filtres appropriés qui nous ont permis d'injecter le es => true de base aux requêtes MySQL lentes trouvées dans l'interface du site. Au lieu d'interroger la base de données, le résultat de chaque requête est extrait du moteur de recherche d'entreprise à l'aide d'un appel API rapide.

Grâce à cette méthode, le temps de réponse pour la recherche de produits, les pages de liste de produits par catégorie et la recherche filtrée a été multiplié par dix. Oui, 10x !

Voici un exemple de code expliquant comment les requêtes frontales de produit liées à WP_Query ont été transférées vers Enterprise Search :

 add_action( 'pre_get_posts', 'offload_query_to_ES' ); function offload_query_to_ES( $query ) { // Avoid unintentional query offloading for backend queries. if ( is_admin() ) { return; } if ( ! $query->is_main_query() ) { return; } if( 'product' !== $query->get( 'post_type' ) ) { return; } // Offloading query to Enterprise Search. $query->set( 'es', true ); }

Le résultat, obtenu en peu de temps, a été un site WooCommerce rapide et évolutif à volume élevé, qui, en combinaison avec l'architecture VIP Cloud existante, lui a permis de gérer de grandes quantités de trafic.

De plus, la vitesse du backend WooCommerce a également été améliorée en déchargeant les requêtes MySQL coûteuses vers Enterprise Search, permettant une expérience plus optimisée pour les propriétaires de boutiques.


Conseil technique : Toutes les requêtes envoyées à Enterprise Search sont entièrement personnalisables car elles sont traduites en JSON ElasticSearch Query DSL à l'aide du filtre suivant :

 ep_pre_request_args

Aller gros dans le traitement des commandes

Notre prochaine étape de test consistait à générer un volume élevé de commandes et de données client associées.

En utilisant des étapes similaires à celles indiquées ci-dessus, nous avons réussi à créer environ 1 million de commandes et les données client associées.

Lors de nos tests, nous avons constaté que la plupart des optimisations étaient liées à des requêtes backend MySQL lentes. Cela impliquait, encore une fois, de décharger les requêtes plus coûteuses vers Enterprise Search et d'indexer les données associées.

Remarque : les commandes WooCommerce sont stockées en tant que type de publication personnalisé dans WooCommerce, elles doivent donc être enregistrées dans les types de publication autorisés d'Enterprise Search avec leurs statuts de publication personnalisés. L'exemple de code est ci-dessous :

 // The `shop_order` post type is not public, so we need to add this to get them to index. add_filter( 'ep_indexable_post_types', function( $post_types ) { $post_types['shop_order'] = 'shop_order'; return $post_types; } ); // Adding the custom order statuses to the index. add_filter( 'ep_indexable_post_status', function( $statuses ) { return array_merge( $statuses, array_keys(wc_get_order_statuses()) ); });

En passant, l'équipe WooCommerce travaille à l'introduction d'un nouveau tableau de commandes personnalisées pour aider à interroger les données associées plus rapidement et de manière plus évolutive. Cela aidera Enterprise Search à continuer d'augmenter l'évolutivité et les performances d'une application de commerce électronique.

En parlant d'options multilingues…

Une approche qui s'adapte bien lors de la configuration d'un site de commerce électronique multilingue à volume élevé consiste à créer des sites distincts au sein d'une installation réseau WordPress et à permettre à chacun d'être connecté séparément à Enterprise Search.

Inpsyde, un partenaire technologique WPVIP, par exemple, propose un plug-in MultilingualPress qui facilite la création d'une configuration réseau similaire prenant en charge un nombre illimité de langues sur des sites à volume élevé.

Cependant, cela crée des défis liés à la synchronisation des stocks entre les sites. Plusieurs solutions existent pour résoudre ce problème, y compris un plugin Central Stock for WooCommerce, également d'Inpsyde.

Un dernier mot à la caisse

En plus de décharger les requêtes MySQL plus coûteuses, Enterprise Search offre également de nouvelles fonctionnalités de recherche, y compris le flou des termes de recherche, les synonymes et la pondération, qui peuvent aider à rendre encore plus efficace une recherche de magasin WooCommerce à volume élevé.

Pouvez-vous dire que nous aimons Enterprise Search ? Franchement, c'est une vraie solution pour augmenter l'évolutivité de votre entreprise, réduire les coûts liés au temps de développement et de mise en œuvre, et ouvrir la voie à de nouvelles implémentations de commerce électronique.

Nous voyons déjà des clients WordPress VIP et WooCommerce existants repousser avec succès et de manière rentable les limites du commerce électronique à haut volume. Vers un avenir plus évolutif !

Auteur

Ovidiu Liuta, premier ingénieur, WordPress VIP