Chose promise, chose due, voici le second article visant à optimiser les temps de chargement de WordPress.
Dans le 1er volet, nous avons vu comme améliorer grandement le thème que vous utilisez pour le rendre plus rapide : "Optimisez la vitesse d'un thème WordPress". Mais cette optimisation seule est insuffisante puisque qu'il va falloir également optimiser le cache, la base de données ou encore vos plugins si vous voulez un réel gain de rapidité.
Dans ce second volet, nous allons voir comment paramétrer le fichier wp-config.php.
Celui-ci est situé à la racine de votre installation, et voici les paramètres que vous devez configurer.
Activer le cache par défaut
Auparavant, WordPress avait un système de cache natif qui était activé avec la ligne suivante :
define('ENABLE_CACHE', true);
Malheureusement, celui-ci ne fonctionne plus depuis la version 2.5. Ajoutez cependant cette ligne car elle permettra de faire fonctionner les différents plugins de cache.
define('WP_CACHE', true);
Réduire le nombre de révisions
La ligne suivante permet de réduire le nombre de sauvegardes d'un article : ce qu'on appelle communément une révision. C'est utile pour le travail collaboratif ou pour garder l'historique d'un contenu un peu comme le fait Wikipédia, mais cela occupe une place important sur la base de données, et peut donc ralentir le site.
Avec la ligne suivante, on limite à deux le nombre de ces révisions pour chaque contenu du site :
define('WP_POST_REVISIONS', 2);
Vous avez aussi une méthode plus brutale qui consiste tout simplement à désactiver cette fonctionnalité :
define('WP_POST_REVISIONS',false);
Vous pouvez aussi réduire le temps entre chaque sauvegarde automatique avec la ligne suivante, en changeant le chiffre par la durée souhaitée (en secondes) :
define('AUTOSAVE_INTERVAL', 300);
Et si vous avez un nombre considérables de révisions dans WordPress, et que vous voulez faire le ménage, il vous faudra utiliser une requête SQL dans l'interface de votre hébergement :
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'
Vider automatiquement la corbeille
Cette fois-ci, la ligne va forcer le vidage de la corbeille pour les contenus ayant plus de X jours : cela inclut les articles, les pages, les commentaires et les médias.
En mettant cette valeur à trois, je m'assure de ne pas surcharger inutilement la base de données de WordPress :
define('EMPTY_TRASH_DAYS', 3 );
Ne pas envoyer de cookies aux sous-domaines
Cette dernière ligne est moins connue et sera pourtant utile pour mettre en place un CDN (Content Delivery Network). Il s'agit de placer sur un sous-domaine (youpi.monsite.com) ou sur un autre nom de domaine vos contenus statiques comme vos images et vos vidéos.
En utilisant d'autres noms de domaine, vous permettez d’accélérer le temps de chargement de ces données. Seul hic, WordPress transmet un cookie inutile pour chacune de ces requêtes. Pour évitez cela, utiliser ces deux lignes de code dans le fichier wp-config.php :
define('COOKIE_DOMAIN', 'www.monsite.com');
define("WP_CONTENT_URL", "http://static.yourdomain.com");
La première est l'URL de votre site. La seconde celle de l'emplacement de vos fichiers statiques. Dans l'exemple ci-dessus, il s'agit d'un sous-domaine mais cela peut être un autre domaine à part entière.
Sécuriser WordPress
Tant que vous êtes dans le fichier wp-config.php, vérifier que ces 4 lignes suivantes sont bien présentes et remplies :
define('AUTH_KEY', '');
define('SECURE_AUTH_KEY', '');
define('LOGGED_IN_KEY', '');
define('NONCE_KEY', '');
Si vous ne voyez pas de clé comme dans l'exemple ci-dessus, rendez-vous à l'adresse suivante pour en générer : https://api.wordpress.org/secret-key/1.1/
MISE A JOUR : utilisez plutôt cette URL https://api.wordpress.org/secret-key/1.1/salt/ (merci à Martin).
Cela permettra de mieux sécuriser votre site Internet (et en plus, cela ne coûte rien).
Augmenter la mémoire allouée
Pour exécuter n'importe quelle action, WordPress fait appel à la mémoire allouée par votre hébergement. Parfois, celle-ci est trop faible et provoque le message d'erreur suivant :
Allowed memory size of xxx bytes exhausted
Pour éviter cela, vous pouvez ajouter cette ligne dans le fichier wp-config.php pour augmenter cette valeur
define('WP_MEMORY_LIMIT', '128M');
Attention cependant :
- WordPress fixe à 32Mo par défaut la mémoire.
- WordPress ne pourra pas dépasser la limite imposée par votre hébergeur. Si celui-ci fixe la mémoire allouée à 32Mo, la ligne de code ne permettra jamais de dépasser cette valeur.
- WordPress testera toujours s'il doit ou non utiliser la fonction. Par exemple si PHP alloue déjà 64Mb, le fait de définir la même valeur dans le fichier wp-config.php ne servira à rien.
Et voilà, le tour est joué. Vous n'avez plus qu'à optimiser votre fichier au plus vite.
26 Commentaires
Bonjour Daniel,
Je vais suivre tes conseils pour optimiser mes sites sous WordPress avec attention !
Il y a des paramètres que je n'avais pas pensé comme vider automatiquement la corbeille.
Encore de quoi optimiser WordPress, merci :)
Hello
Je vais peut-être paraitre bizarre mais les clés de sécurité je préfère les laisser vides car WordPress étant bien fait, si c'est vide ou que ça vaut "put your unique phrase here" alors il va entrer en BDD des valeurs à votre place.
Résultat, ces valeurs seront lues de la BDD (sans requête en plus car elle sont dans les options déjà chargées) et non plus du fichier.
Alors vous me direz "oui bon c'est pareil"
Oui ou presque, j'ai recontré plus de plugin vulnérables permettant de lire le contenu des fichiers que des injections SQL, et lire le wp-config, ne pas pouvoir se connecter à la BDD car mon IP n'est pas autorisée, mais garder les clés pour créer une faille CSRF géante sur le site cible, c'est possible. Une affaire de chacun, c'est mon choix comme dirait Jean-Luc.
Qui a dit que je suis parano ? non, j'imagine juste le scénario qui est possible pour pirater un site, c'est mon métier aussi donc bon ^^ ...
Enfin, je ne vous dit pas de le faire, mais sachez que pour info, WordPress gère bien ces clés, vides ou pas la sécurité est la même pour vous.
Merci pour ces infos d'optimisation !
Bonjour,
Un grand merci pour cet article.
J'ai cependant une question: si on change le nombre de révisions à 2 par exemple et que l'on modifie ensuite un article qui en avait 5. Trois d'entre elles ne s'affichent plus, mais sont-elles effacées ou simplement masquées?
Je ne connaissais pas l'astuce pour activer le cache sous WordPress... mais si ce dernier a été désactivé depuis la 2.5 - j'ai connu si si :), n'y a-t-il pas une raison explicative ?
Je ne pense pas que les développeurs de WordPress ait fait cela par hasard, non ?
Sinon, good job !
On va essayer tout cela assurément.
merci pour le partage
Merci Daniel pour ce second article sur l'optimisation de WordPress.
Je ne connaissais pas toutes les astuces comme le vidage de la corbeille au bout de x jours notamment.
Merci pour toutes ces informations vraiment pertinentes. Je pense que ça va bien me servir pour mettre à niveau mes blogs sous wordpress. j'aime beaucoup la config pour le nombre de révisions (à noter qu'il y a un plugin qui permet de supprimer d'un coup toutes les révisions quand la base commence à prendre trop de place)
Merci pour cette nouvelle mine d'information !
Avant de laisser ce commentaire je me suis permis de tester et je n'ai rencontré aucun problème au contraire, un réel gain au chargement de mon blog.
0,128s avant intervention 0,118s après.
Je passe à l'étape 1, l'optimisation du thème.
Bonjour,
Je viens de faire les 3 premières manips et pour la première fois mon site ne marche plus puis remarche, ça peut être du à mes changements de config.php ?
Autre question : Lorsque je met
/** Réduire le nombre de révisions
define('WP_POST_REVISIONS', 2);
Vider automatiquement la corbeille
define('EMPTY_TRASH_DAYS', 3 );
/**Activer le cache par défaut
define('WP_CACHE', true);
Dois-je changer mes WP par 2 autres lettres que j'ai défini ainsi dans config.php comme suit: $table_prefix = 'xxx_';
Merci !
Bonjour Daniel, excellent article comme d'hab ;)
Les plugins de cache (w3 total cache par exemple)n'ajoutent-ils pas, par défaut: "define('WP_CACHE', true);" ?
Pour le vidage et les révisions, j'avoue que j'utilise plutôt le plugin wp-optimize
@Haydee : pas besoin de changer les préfixes ;)
@Fabrice : certains plugins l'ajoutent automatiquement, mais uniquement s'ils ont les droits d'écriture sur le fichier wp-config ;)
Attention, effacer les révisions d'un article dont on a modifié l'url peut provoquer des erreurs 404.
En effet, c'est la révision qui porte l'ancienne url et la version courante de l'article porte la nouvelle.
Si on efface la révision, on perd par la même l'ancienne version de l'url.
Il faut donc penser à vérifier sur google webmaster tools les 404 et rediriger de l'ancienne vers la nouvelle avec des 301 (il existe des plugins pour ça ou via .htaccess si on a envie de mettre les mains dans le camboui).
Tant qu'à sécuriser WordPress pour empêcher les éventuelles failles XSS, autant préférer api.wordpress.org/secret-key/1.1/salt/ à api.wordpress.org/secret-key/1.1/ !
@Martin : tout à fait d'accord. J'ai mis à jour l'article. Merci à toi.
Hello @martin, ces clés ne servent pas à boucher les failles XSS, et tu peux ne pas les remplir que ton site est tout autant protégé en fait, légende urbaine ;)
Ces clés servent dans les hash des pass, des cookies, création des nonces (jetons de sécurité) etc Elles renforcent leur chiffrage. Si le clés sont vides ou valent "put your unique phrase here", WordPress utilise l'url que tu as donné pour en générer et les stocker en BDD. Ensuite lorsqu'il va vouloir lire ces define venant de wp-config, si il les trouve vides ou valent "put your ..." alors il va chercher en BDD (si il ne les a pas, c'est là ou il les génère)
Voilà pour l'info sécu du matin :)
Encore un article efficace (comme toujours), des commentaires constructifs et bien utiles.
Merci Daniel, je m'en vais optimiser tout ça de ce pas et merci aussi à Julio pour le complément d'info sécurité ;-)
Question sécurité, on peut aussi changer les droits du fichier wp-config.php.
Sur l'un de mes sites, j'ai passé le truc en chmod 440.
My2cents.
Merci Daniel pour la synthétisation de ces différents points de config.
@Aurélien : la constante ENABLE_CACHE servait à activer un cache statique de pages (dans le même genre que ce que fait W3-Total-Cache par exemple), mais celui-ci a été retiré car c'était une fonctionnalité un peu en marge de ce que doit fournir le coeur de WordPress.
Il valait mieux laisser les plugins s'en charger et proposer différentes implémentations (grâce à memcache ou APC par exemple).
La nouvelle constante WP_CACHE sert du coup à activer l'inclusion du drop-in "advanced-cache.php", utilisé par les plugins de cache pour gérer ce cache statique.
Par contre, WordPress n'a pas abandonné le cache pour autant ! Ils sont passé à un cache "objet" non persistant à la place du cache statique : par défaut, tous les appels à "wp_cache_add" sont stockés dans des variables PHP. Ceci évite de faire des centaines de requêtes en base pour les mêmes données (typiquement, les options).
Il est néanmoins possible de rendre ce cache "objet" persistant grâce à un autre drop-in : object-cache.php.
Ce fichier n'a qu'à réimplémenter la classe de WordPress pour se connecter à une couche de persistance (système de fichier, APC, Memcache, Redis...).
Merci Lionel de tes explications !!
Mouhais...
Rien de neuf en fait...
De bons conseils mais c'est du réchauffé.
Dommage...
Pour ceux que ça intéresse un petit complément à cet article:
http://dev.mathiasphilippe.com/optimiser-le-fichier-wp-config-de-wordpress
https://lashon.fr/configurer-wp-config-options/
http://digwp.com/2009/06/wordpress-configuration-tricks/
Merci tout de même pour ces rappels.
Certains des commentaires précédents sont tout de même instructifs.
@SamSoul Le net est ainsi fait. L'avantage ici, c'est que Seomix fait parti pour moi de la sphère francophone et touche un autre panel d'utilisateurs. Les sites US sont très peus lu et compris et commentés par les utilisateurs français, les 2 autres liens FR, 4 et 2 commentaires, c'est dire la "portée" des articles. Ici ça ouvre un nouveau débat, on donne d'autres conseils et tu le soulignes. Le but n'est pas juste de faire un rappel ou se faire son post du jour, il est là aussi pour faire venir parler, et c'est que qu'a réussi Daniel avec cet article et ses 22 commentaires.
A+ ;)
Hello,
je reviens sur cet article et me demande si il n'y aurait pas un moyen de bidouiller le vidage auto de la corbeille pour supprimer automatiquement les posts
rappel :
tu proposes : define('EMPTY_TRASH_DAYS', 3 );
dans le cas où je souhaite supprimer les posts qui ont 3 jours, cette fonction est elle modifiable ?
Merci d'avance :)
Malheureusement non : pour faire cela, il faut lancer un CRON tous les jours pour supprimer tous les articles dont la date de publication date de plus de 3 jours. Et en faisant cela, cela provoquera forcément des dizaines et des dizaines d'erreurs 404.
Merci Daniel pour la réponse
dommage, parce que les plugins existants ne me conviennent pas non plus, je vais continuer à le faire via BDD alors
Bon lundi :)
@Julio Potier:
Tout à fait d'accord avec toi.
Toutefois, cet article aurait pût être l'occasion de distiller des astuces et infos complémentaires à ce que l'on trouve déjà ailleurs. Un "plus" à la sauce SeoMix.
C'est ce que j'aurais souhaité. Mais comme tu le souligne, ce post en aura certainement contenté beaucoup. Et c'est tant mieux.
Je te rejoins sur ta remarque concernant les commentaires qui apportent une réelle valeur ajoutée à cette article.
En tous cas merci pour ton boulot sur BAW ainsi qu'à l'équipe SeoMix pour ses articles.
Bonne semaine
Pour ceux qui ont la possibilité de paramétrer leurs taches cron sur leur serveur
j'ai désactivé le fichier wp-cron.php avec la commande suivante (dans wp-config.php):
puis créée une tache cron qui s’exécute toute les 15 min selon la fréquence de vos publications, commentaires ce temps peu varier.
commande à ajouter en cron :
ce qui évite d'avoir des appels vers wp-cron.php a chaque utilisateur connectés sur le site
Laisser un commentaire