Optimiser les performances de WooCommerce

WooCommerce possède d’innombrables avantages permettant de rapidement mettre en place un site de vente en ligne. Néanmoins, il existe certains cas où il faut prendre quelques précautions afin de réussir à maintenir un haut niveau de performance sur son e-commerce :

 

  • Un fort trafic inattendu ne vous laisse pas le temps de migrer vers un hébergement plus performant
  • La quantité de produits (et de variations) de votre boutique devient trop importante
  • Vous cumulez de nombreux plugins activés, pas toujours très bien développés ou testés sur un site à fort trafic

 

Nous sommes récemment tombés sur le cas où l’un de nos clients a installé, sans nous en informer, un plugin permettant de sauvegarder le panier d’un utilisateur pendant 30 minutes.

Nous nous sommes rendu compte rapidement en voyant les performances chuter, que cette extension, pourtant sur le Marketplace officiel de WooCommerce, n’était clairement pas adaptée à un site dont le trafic et les ventes sont importants. La cause de ces ralentissements : des requêtes vers la base de données trop nombreuses et trop longues. Nous avons alors étudié en profondeur le schéma de base de données de WordPress + WooCommerce ainsi que toutes les requêtes transitant sur le site pour tenter d’améliorer les performances.

 

Grâce à ces investigations, nous avons pu déduire certaines bonnes pratiques à adopter lorsque l’on veut utiliser WooCommerce de manière performante :

Optimiser sa base de données : Nettoyer la table wp_options

Supprimer les options inutiles

Cette table a pour fonction de stocker les options générales de WordPress, non liées à des posts. Elle contient par exemple tous les réglages effectués dans votre interface d’administration. Cette table est également grandement utilisée par les plugins pour leurs stockages, d’où l’importance de se pencher sur son optimisation.

Une option enregistrée se présente sous cette forme :

Untitled

 

La colonne qui nous intéresse est la colonne « autoload », si elle vaut « yes », l’option sera récupérée automatiquement au chargement de chaque page. Optimiser le temps de chargement d’une page passe donc par la réduction d’options chargées automatiquement.

 

Pour cela, commençons par lister les options les plus lourdes par ordre décroissant :

 

SELECT option_name, length(option_value) AS option_value_length
FROM wp_options
WHERE autoload='yes'
ORDER BY option_value_length DESC;

 

 

À partir de cette liste, vous pouvez supprimer les options les plus lourdes dont vous n’avez plus l’utilité, ce sera couramment le cas par exemple pour un plugin non utilisé n’ayant pas nettoyé ses données lors de sa désinstallation.

 

De manière générale, lorsque vous développez un plugin, évitez d’utilisez des options chargées automatiquement si vous n’avez pas besoin de vos données sur toutes les pages du site.

Ajouter un index à la colonne « autoload »

La table wp_options étant théoriquement destinée à ne pas subir trop d’ajouts et de mises à jour (requêtes INSERT et UPDATE), il est alors possible d’y ajouter un index pour accélérer les requêtes de sélection :

 

CREATE INDEX autoloadindex ON wp_options(autoload, option_name);

 

Si toutefois vos outils de mesure indiquent une baisse de performance à la suite de cette opération, vous pouvez le supprimer facilement :

 

DROP INDEX autoloadindex ON wp_options

 

Nettoyer les transients

Les transients sont une manière de mettre des données en cache, ce sont des données stockées comme les autres dans la table wp_options mais avec une date d’expiration. A leur expiration, ces données sont donc automatiquement supprimées, en théorie du moins. En effet, il arrive que des anciens transients ne soient pas supprimés s’ils ne sont plus appelés, avec la conséquence d’alourdir inutilement la table wp_options, vous pouvez donc le faire manuellement :

 

DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_site_transient_%');

 

Limiter ou désactiver les révisions d’articles WordPress

Bien que la fonctionnalité soit intéressante, il est rare en pratique d’utiliser la fonctionnalité de révision de WordPress. Il est donc utile de limiter le nombre de révisions disponibles pour alléger la base de données, voire de désactiver complétement la fonctionnalité si vous ne l’utilisez pas.

Pour réduire le nombre de révisions à 2 par exemple :

define( 'WP_POST_REVISIONS', 2 );

Pour les désactiver :

define( 'WP_POST_REVISIONS', false );

 

Surveiller les requêtes transitant sur votre site

Afin d’opérer une surveillance de vos requêtes et d’isoler les plus gourmandes, il est possible de les conserver dans une table MySQL (mysql.general_log) à l’aide de ces commandes :

 

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE';

 

Cette opération est extrêmement lourde en ressources et ne devrait pas être utilisée sur un site en production.

Des outils puissants comme New Relic, à installer sur votre serveur, seront également d’une grande aide pour isoler ce qui nuit aux performances de votre site.

Cet outil est néanmoins payant et il est possible, moins efficacement, d’opérer une analyse manuelle page par page de vos requêtes grâce au plugin Query Monitor.

Utiliser des plugins utiles à l’optimisation de WordPress / WooCommerce

Nous utilisons dorénavant deux plugins sur nos e-commerce afin rendre ces derniers le plus véloce possible :

  • Scalability Pro : Son auteur promet de pouvoir utiliser WooCommerce avec plus d’un million de produits dans son inventaire à l’aide de son plugin. Il va se charger dans un premier temps de mettre des index sur quelques tables de WooCommerce. Vous aurez ensuite à votre disposition une dizaine d’options qu’il faudra tester sur votre serveur de développement avant de mettre sur votre production. L’auteur est arrivé à concevoir ce plugin lorsqu’il s’est rendu compte que WooCommerce n’était parfois pas très économe dans certaines de ses requêtes SQL. Certaines opérations visées sont tout à fait réalisables une fois par nuit plutôt qu’à chaque consultation.
  • W3 Total Cache : Le plus célèbre plugin de mise en cache, extrêmement performant et simple à prendre en main si l’on ne sort pas du menu « General ».

 

L’utilisation de ces deux plugins a divisé par 3 voire 4 le temps de chargement de certaines pages habituellement très longue à charger aux moments de fort trafic. De plus nous avons pu multiplier par 4 la capacité de nos sites à accueillir des visiteurs.

 

Divers plugins vont également vous aider à supprimer automatiquement les données en trop de votre base de données, le plus connu d’entre eux est WP-Optimize.

 

Si vous rencontrez des problèmes de performance avec votre e-shop sous WooCommerce, n’hésitez pas à faire appel à nous !