Nous avons été contacté par un de nos clients qui dispose d’une boutique sous PrestaShop 1.5. Sa volonté était d’envoyer à une liste de clients VIP un mailing proposant un cadeau sous forme d’un code promo de 60 EUR leur permettant d’acheter un produit sur le shop. Le nombre de clients destinataires était de plus de 5.000.
A cette fin et de son initiative, le client a souhaité utiliser les règles panier. Après quelques recherches, il a trouvé un module qui prend cela en charge correctement. Ce module automatise la création de règles panier.
Tout semble donc se mettre en place, mais après les premiers tests, le shop est devenu extrêmement lent. Le client nous contacte et nous demande de trouver une solution plus efficace.
Le souci provient de la manière dont PrestaShop gère les codes promo : ce sont des règles panier qui par nature peuvent s’appliquer en fonction de plusieurs critères. En effet, PrestaShop s’impose de vérifier chaque règle panier pour chaque ligne du panier. De ce fait, pour un panier de 5 produits, 25.000 vérifications (chacune de 2 requêtes SQL) vont être exécutées, ce qui rend la page panier totalement inutilisable vu le grand nombre d’accès à la base de données qui devront être réalisés.
Nous avons alors mis en place une amélioration des règles panier :
– ajout d’un type de règle panier “multiple”
– si ce choix est activé, PrestaShop n’utilise pas le code défini dans la règle panier, mais va vérifier si le code donné par l’utilisateur est dans une liste de codes (liste pour le moment injectée dans la base de données dans une table spécifique).
– chaque code en base de données possède un nombre d’utilisation. Le nombre d’utilisation de la “règle panier mère” étant la somme de toutes les utilisations possibles.
– on empêche enfin d’utiliser ce type de code comme un code partiel
Ceci implique qu’on peut se permettre de définir une seule règle panier au lieu des 5.000 comme dans la situation initiale. Le nombre d’accès à la base de données est ainsi réduite d’autant permettant à la page panier d’être enfin très performante.
Si vous rencontrez ce besoin, n’hésitez pas à nous contacter, nous pourrions améliorer notre solution et également l’implémenter via un module spécifique.