|

WordPress Autoload Options : optimiser et nettoyer les données chargées automatiquement

WordPress Autoload Options

Dans WordPress, la table des options joue un rôle essentiel dans la base de données en stockant divers paramètres et configurations du site, particulièrement les options marquées comme Autoload=yes.

La table wp_options contient une gamme étendue de données, comme les informations pour le thème, les paramètres des plugins, des blocs et d’autres données diverses. Avec le temps, des changements de thèmes, des ajouts et suppressions de plugins ou de block, de nombreuses options obsolètes peuvent être chargées, indiquées comme « Autoload ». Malgré la désinstallation complète d’un thème ou d’un plugin, ces données ne sont pas supprimées en base de données. Un trop grand nombre d’options marquées comme Autoload peut nuire aux performances de votre site, voire déclencher une erreur fatale. C’est pourquoi, il est important de changer la valeur du paramètre Autoload à « no » sur les données obsolètes, voire lorsque c’est possible supprimer ces données.

Chaque entrée de cette table comporte quatre champs principaux : option_id, option_name, option_value et autoload. Le champ option_name indique le nom de l’option, tandis que option_value enregistre sa valeur correspondante, qui peut varier en type et taille de données.

Le champ autoload détermine si l’option doit être chargée automatiquement à chaque requête de page. Les options marquées comme « autoload » sont chargées en mémoire à chaque chargement de page. Cela permet d’améliorer les performances de chargement. Toutefois, lorsque la quantité de données automatiquement chargées devient trop importante, cela a un impact négatif sur les performances.

Les options « Autoload » impactent les performances de la partie admin et du front-end

Dans WordPress, les options marquées comme « autoload » dans la table wp_options sont chargées à chaque chargement de page, que ce soit dans la partie admin ou dans la partie « front » (site public). Ces options sont automatiquement chargées dans la mémoire au début de chaque requête vers WordPress, indépendamment de l’endroit où la requête est effectuée (que ce soit le tableau de bord admin ou le front-end du site).

La raison pour laquelle ces options sont chargées automatiquement est que ce sont généralement des options nécessaires au fonctionnement de base du site et doivent être accessibles rapidement sans avoir à effectuer des requêtes unitaires supplémentaires (et donc plus lentes) à la base de données.

Quelle est la taille limite pour l’ensemble des options chargées automatiquement ?

Avec la version 6.6.1 de WordPress, la taille limite pour les options est fixée à 800Kb. Cette valeur se trouve dans le fichier wp-admin > includes > class-wp-site-health.php à la ligne 2648.

$limit = apply_filters( 'site_status_autoloaded_options_size_limit', 800000 );

Si cette valeur est dépassée, un message « critical issue » apparait dans le menu Tools/Site Health :

Autoloaded options could affect performance

Autoloaded options are configuration settings for plugins and themes that are automatically loaded with every page load in WordPress. Having too many autoloaded options can slow down your site. Your site has 980 autoloaded options (size: 940Kb) in the options table, which could cause your site to be slow. You can review the options being autoloaded in your database and remove any options that are no longer needed by your site.

Voici la traduction de ce message en français :

Les options autoloadées peuvent affecter les performances

Les options autoloadées sont des paramètres de configuration pour les plugins et les thèmes qui sont automatiquement chargés à chaque chargement de page dans WordPress. Un trop grand nombre d'options autoloadées peut ralentir votre site. Votre site possède 980 options autoloadées (taille : 940 Ko) dans la table des options, ce qui pourrait entraîner un ralentissement. Vous pouvez examiner les options chargées automatiquement dans votre base de données et supprimer celles qui ne sont plus nécessaires à votre site.

Le message indique un problème de performance. Pourtant pour un site dont je m’occupe, cela a créé une erreur fatale dans l’interface d’administration lors de l’édition d’un article ou de la création d’un nouveau.

Vous pouvez modifier la taille maximum des options automatiquement chargée. Il est conseillé de ne pas dépasser les 1Mb. Toutefois, je vous conseille de faire le ménage dans vos options et de changer la valeur Autoload à « No » pour les options obsolètes (ancien plugin, ancien thème …).

Si votre thème actif est la principale source du problème, c’est certainement qu’il est mal codé. C’est peut-être le moment d’en changer ! Avant toutes choses, il faut maintenant identifier les options qui représentent le plus gros volume de données.

Comment nettoyer les options « Autoload=yes » ?

Il y a plusieurs méthodes pour vérifier la taille des options chargées automatiquement par votre site. Les deux approches les plus fréquentes sont l’utilisation d’un script SQL et l’outil WP-CLI.

Dans les deux cas, l’opération se fait en trois étapes :

  • Lister les options avec Autoload=yes triées par le volume de données (priorisez votre travail sur les données les plus volumineuses)
  • Identifier les options obsolètes avec Autoload=yes (chargé automatiquement à chaque page)
  • Modifier la valeur Autoload à « no » pour la ou les options obsolètes

Nettoyer les données automatiquement chargées avec un script SQL

L’utilisation d’une requête SQL est la solution la plus facile. De plus, elle vous permettra de personnaliser la requête. Si vous ne savez pas comment exécuter un script SQL sur la base de donnée de votre site WordPress, suivez ce lien. Il existe plusieurs solutions comme PhpMyAdmin, des plugins, un client SQL, Adminer ou encore une page PHP personnalisée.

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

Le résultat de la requête varie en fonction de votre site. L’objectif est d’identifier les options qui correspondent à un ou des plugins supprimés, ou encore à un ancien thème supprimé.

Wordpress Résultat d'une requête SQL pour afficher les options triées par la taille des données

J’ai déjà fait une partie du travail sur ce site, il reste donc peu d’options chargées automatiquement qui ne sont pas pertinente. Il y avait auparavant des options qui concernaient le thème de TagDiv « Newspaper », aujourd’hui supprimé. Une des options du thème faisait 544 Ko, ce qui est une valeur importante. En passant le champ autoload à « No », le site WordPress est repassé sous la barre des 800 Ko.

Pour passer la valeur autoload d’une option à « No », identifiez-la ou les options obsolètes, notez l’identifiant. Ensuite exécutez la requête SQL suivante en replaçant l’identifiant de l’option concernée :

update wp_options set autoload='no' where option_id = <option_id>;

Répétez l’opération sur d’autres options, moins il y aura de données inutiles chargées automatiquement, plus votre site sera rapide. Attention, si vous avez un cache de données, n’oubliez pas de la vider pour constater les changements.

Supprimer des données autoloadées avec l’outil WP-CLI

Pour utiliser l’outil WP-CLI, il est nécessaire d’avoir un accès en ligne de commande sur votre serveur et bien sûr que l’outil soit installé. Si WP-CLI n’est pas installé, suivez ce guide. L’outil est sécurisé et n’occupe que très peu d’espace sur votre serveur.

Cette première commande indique la taille totale des options avec Autoload= »yes ».

# Obtenir la taille totale des données avec autoload="yes"
wp option list --autoload=on --format=total_bytes

Ensuite pour lister les options, il y a plusieurs possibilités. La plus simple à mon sens est d’exécuter une requête SQL avec WP-CLI. Il existe une autre solution avec wp option list, mais il faut se plonger dans la documentation pour au final obtenir le même résultat. A noter, pour obtenir un fichier CSV, remplacer –table par –-format=csv.

# liste toutes les options avec autoload="yes" triées par la taille des données
wp db query "
SELECT 
  option_id, 
  option_name, 
  LENGTH(option_value) AS data_size 
FROM 
  wp_options 
WHERE 
  autoload = 'yes' 
ORDER BY 
  data_size DESC
;" --table

Si vous cherchez des options avec un nom particulier, vous pouvez ajouter dans la clause WHERE le critère suivant option_name LIKE ‘%NomDuThemeOuDuPlugin%’ :

wp db query "
SELECT 
  option_id, 
  option_name, 
  LENGTH(option_value) AS data_size 
FROM 
  wp_options 
WHERE 
  autoload = 'yes' 
  AND option_name LIKE '%NomDuThemeOuDuPlugin%' 
ORDER BY 
  data_size DESC
;" --table

Une fois que vous avez identifié les options obsolètes, exécutez la commande suivante avec le nom de l’option concernée :

wp option set-autoload NomDeVotreOption no

Conclusion

Les options autoloadées présentent à la fois des avantages et des inconvénients. D’une part, elles peuvent améliorer les performances de votre site, en chargeant par bloc les options nécessaires. D’autre part, elles peuvent aussi nuire à sa scalabilité, la capacité de votre serveur à répondre à plusieurs requêtes simultanées.

Avoir ces options n’est pas problématique en soi, mais il est préférable de contrôler leur nombre et leur taille. Comme nous l’avons vu, la suppression de plugins ou de thème laisse dans la base de données WordPress de nombreuses options avec le paramètre Autoload à « Yes ». Certains plugins ou thème ont un usage excessif de ces données, évitez les pour ne pas impacter les performances de votre site. Lorsque vous supprimez plusieurs plugins ou encore que vous changez de thème, c’est le moment idéal pour nettoyer les options autoloadées.

En utilisant les techniques mentionnées précédemment, vous pouvez identifier les options autoloadées et en limiter la quantité. Pour optimiser les performances et la scalabilité de votre site. WordPress est un outil puissant et riche en fonctionnalité, mais pour conserver de bonnes performances des opérations de maintenance sont nécessaires.

Si vous appréciez nos articles, ne manquez les prochains en vous abonnant à Cosmo Games sur Google News, vous pouvez également nous suivre sur X (ex Twitter). N'hésitez pas à partager vos réactions, commentaires ou remarques dans les commentaires, afin d'enrichir le contenu, de mieux vous comprendre et intégrer les différents points de vue. Un partage sur les réseaux sociaux nous aide également beaucoup, merci pour votre soutien !

Publications similaires

4 commentaires

  1. Bonjour. Ah, ben mince, moi j’ai supprimé les options obsolètes dans la base. Qu’est-ce que ça donne alors ? Ça a quand même réduit l’ensemble des autoload…

    1. Les lignes dans options peuvent être référencées par d’autres tables, c’est pour cette raison qu’il est préférables d’éviter la suppression physique de la ligne (delete). Potentiellement, cela peut provoquer une erreur.

      Il y a également d’autres cas qui peuvent créer des problèmes suite à un delete. Comme la réactivation du plugin ou thème.

      De manière générale avec WordPress, la suppression physique est à éviter, elle peut induire des erreurs.

      De toutes façons, les tables ne sont jamais chargées dans leur totalité (il y a toujours une clause where qui limite les données chargées). Laisser une ligne obsolètes en base n’a donc pas d’impact sur les performances.

  2. Bonjour. j’ai fait du ménage dans mes tables de données. Ce qui m’étonne (vous n’êtes pas le seul dans ce cas), c’est que vous préconisez de passer les valeurs autoload en « no ». S’il s’agit d’anciens thèmes, plugin supprimés. Pourquoi ne pas simplement supprimé ces options autochargées, puisqu’elle ne correspondent plus à rien ?

    1. Bonsoir Jean-Pierre,
      L’idéal est effectivement de supprimer les options inutiles avec WP-CLI (pas avec une suppression en base de données). L’opération se passe bien en générale, mais sur certains sites, j’ai rencontré des problèmes lors de la suppression d’une option avec WP-CLI. Je conseille donc d’effectuer une sauvegarde avant ce genre d’opération ou idéalement faire l’opération sur un environnement de test.

      Autrement dans la majorité des cas, faire une mise à jour avec autoload à “no” est largement suffisant. La base de données WordPress est pleine de données obsolétes.

      Bonne soirée

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *