Optimisation WordPress: Profilage, Mise en Cache et Gestion de la Base de Données
- Auteurs
- Nom
- Jean-Simon Lyonnais
La performance d'un site WordPress est cruciale pour offrir une expérience utilisateur optimale. Un site lent peut entraîner une perte de trafic, une diminution du taux de conversion et même nuire à votre référencement. Dans cet article, nous allons explorer comment profiler votre site WordPress pour identifier les goulots d'étranglement et les techniques pour accélérer votre site.
Il exsite plusieurs plugins pour optimiser les performances de votre site WordPress. Mais il est préférable de comprendre comment fonctionne votre site pour identifier les goulots d'étranglement et ne pas installer des plugins inutiles ou qui peuvent ralentir votre site.
Profiler votre site WordPress
La première étape pour améliorer les performances de votre site WordPress est de comprendre comment il fonctionne. Pour cela, vous pouvez utiliser un outil de profilage, qui vous permettra de voir les requêtes SQL, les requêtes HTTP, les fichiers chargés, etc.
Utilisation de la barre de débogage
La barre de débogage est un outil intégré à WordPress qui fournit des informations sur les requêtes, le cache, les hooks et bien d'autres choses. Pour l'activer, ajoutez ce code à votre fichier wp-config.php
:
define('SAVEQUERIES', true);
Une fois activé, vous pouvez voir le nombre de requêtes SQL effectuées sur une page et le temps total de ces requêtes.
Profiler les requêtes
Avec SAVEQUERIES
activé, vous pouvez examiner les requêtes SQL individuelles pour voir lesquelles prennent le plus de temps. Par exemple :
global $wpdb;
print_r($wpdb->queries);
Mesurer le temps d'exécution du PHP
Pour mesurer le temps d'exécution de votre code PHP, vous pouvez utiliser la fonction microtime(). Par exemple, pour mesurer combien de temps prend un morceau de code :
$start_time = microtime(true);
// Votre code à profiler ici
$end_time = microtime(true);
$execution_time = ($end_time - $start_time);
echo "Temps d'exécution : {$execution_time} secondes";
Mise en Cache et Transients WordPress
La mise en cache est une technique qui consiste à stocker temporairement des données dans un emplacement plus rapide pour les récupérer plus tard. Cela permet d'éviter de faire des requêtes coûteuses à la base de données ou de générer des pages dynamiques à chaque fois qu'un visiteur arrive sur votre site.
Utilisation des Transients pour le cache
Les transients sont une interface de mise en cache temporaire intégrée à WordPress. Ils sont idéaux pour stocker des données qui ne changent pas souvent mais qui sont coûteuses à générer.
Mise en place d'un transient
Pour mettre en place un transient, vous devez utiliser les fonctions set_transient()
et get_transient()
.
set_transient('my_transient', $data, 3600); // Stocke $data pendant 1 heure
Pour récupérer le transient :
$data = get_transient('my_transient');
if (false === $data) {
// Le transient a expiré ou n'existe pas, générer à nouveau les données
}
Il est aussi possible de supprimer un transient si on a besoin de le mettre à jour :
delete_transient('my_transient');
Exemple d'utilisation des transients
Si vous avez un widget qui affiche les derniers articles de votre blog, vous pouvez utiliser un transient pour stocker les données pendant 24 heures. Cela permettra d'éviter de faire une requête à la base de données à chaque fois qu'un visiteur arrive sur votre site.
// Récupère le transient
$posts = get_transient( 'latest_posts' );
// Si le transient n'existe pas, on le crée
if ( false === $posts ) {
$posts = get_posts( array(
'numberposts' => 5,
) );
// On stocke les données pendant 24 heures
set_transient( 'latest_posts', $posts, 24 * HOUR_IN_SECONDS );
}
// Affiche les articles
foreach ( $posts as $post ) {
echo '<li>' . get_the_title( $post ) . '</li>';
}
Mise en cache d'objet
WordPress prend également en charge la mise en cache d'objets, qui est une autre forme de mise en cache pour stocker des objets ou des requêtes de base de données. Si votre serveur prend en charge des systèmes de mise en cache tels que Memcached ou Redis, la mise en cache d'objets peut être particulièrement efficace.
Pour utiliser la mise en cache d'objets, vous pouvez utiliser les fonctions wp_cache_set
, wp_cache_get
et wp_cache_delete
.
Quel est la différence entre les transients et la mise en cache d'objets ?
Les transients sont stockés dans la base de données, tandis que la mise en cache d'objets est stockée dans la mémoire du serveur. La mise en cache d'objet est plus adaptée au stockage rapide et temporaire de données, tandis que les transients sont mieux adaptés au stockage de données à durée limitée qui ne changent pas souvent. Dans un environnement WordPress optimisé, les deux méthodes peuvent être utilisées conjointement pour maximiser les performances.
Mise en Cache d'Objet
La mise en cache d'objet fait référence au stockage temporaire d'objets (généralement des résultats de requêtes de base de données) dans la mémoire pour éviter de refaire des requêtes coûteuses.
- Persistance : Par défaut, la mise en cache d'objet dans WordPress n'est pas persistante. Cela signifie que les données mises en cache sont perdues lorsque le processus PHP se termine. Cependant, avec des systèmes comme Memcached ou Redis, la mise en cache d'objet peut être rendue persistante entre les requêtes.
- Rapidité : La mise en cache d'objet est extrêmement rapide, surtout avec des solutions en mémoire comme Memcached.
- Utilisation : Elle est principalement utilisée pour stocker des résultats de requêtes de base de données, mais elle peut aussi stocker d'autres types de données.
Transients
Les transients sont une interface de mise en cache temporaire intégrée à WordPress. Ils sont idéaux pour stocker des données qui ne changent pas souvent mais qui sont coûteuses à générer.
- Persistance : Contrairement à la mise en cache d'objet par défaut, les transients sont toujours persistants. Si aucune solution de mise en cache d'objet externe n'est utilisée, les transients sont stockés dans la base de données de WordPress.
- Expiration : Les transients ont toujours une durée de vie, après laquelle ils expirent automatiquement.
- Utilisation : Ils sont idéaux pour stocker des données qui ne changent pas souvent mais qui sont coûteuses à générer, comme les résultats d'une API externe.
Optimisation de la base de données
Au fil du temps, la base de données peut s'encombrer de données inutiles, de tables orphelines et d'autres éléments superflus. Voici quelques techniques et exemples de code pour optimiser votre base de données WordPress.
Supprimer les révisions de publication
Les révisions de publication sont des sauvegardes automatiques de vos articles et pages. Elles sont utiles si vous souhaitez revenir à une version précédente d'un article ou d'une page, mais elles peuvent également s'accumuler et prendre beaucoup de place dans votre base de données.
Pour supprimer les révisions de publication, vous pouvez utiliser la fonction wp_delete_post_revision()
.
// Supprime toutes les révisions de publication
function delete_all_post_revisions() {
$revisions = get_posts( array(
'post_type' => 'revision',
'posts_per_page' => -1,
) );
foreach ( $revisions as $revision ) {
wp_delete_post_revision( $revision->ID );
}
}
Supprimer les commentaires en attente ou indésirables
Les commentaires en attente ou indésirables peuvent également s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les commentaires en attente ou indésirables, vous pouvez utiliser la fonction wp_delete_comment()
.
// Supprime tous les commentaires en attente ou indésirables
function delete_all_pending_comments() {
$comments = get_comments( array(
'status' => 'hold',
'number' => -1,
) );
foreach ( $comments as $comment ) {
wp_delete_comment( $comment->comment_ID );
}
}
Supprimer les tables orphelines
Les tables orphelines sont des tables qui ne sont plus utilisées par aucun plugin ou thème. Elles peuvent s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les tables orphelines, vous pouvez utiliser la fonction dbDelta()
.
// Supprime toutes les tables orphelines
function delete_orphaned_tables() {
global $wpdb;
$tables = $wpdb->get_results( "SHOW TABLES", ARRAY_N );
$tables = array_map( 'reset', $tables );
foreach ( $tables as $table ) {
if ( ! in_array( $table, $wpdb->tables ) ) {
$wpdb->query( "DROP TABLE IF EXISTS $table" );
}
}
}
Supprimer les métadonnées orphelines
Les métadonnées orphelines sont des métadonnées qui ne sont plus utilisées par aucun plugin ou thème. Elles peuvent s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les métadonnées orphelines, vous pouvez utiliser la fonction delete_metadata()
.
// Supprime toutes les métadonnées orphelines
function delete_orphaned_metadata() {
global $wpdb;
$metas = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id NOT IN ( SELECT ID FROM $wpdb->posts )", ARRAY_A );
foreach ( $metas as $meta ) {
delete_metadata( 'post', $meta['post_id'], $meta['meta_key'], $meta['meta_value'] );
}
}
Supprimer les termes orphelins
Les termes orphelins sont des termes qui ne sont plus utilisés par aucun plugin ou thème. Ils peuvent s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les termes orphelins, vous pouvez utiliser la fonction wp_delete_term()
.
// Supprime tous les termes orphelins
function delete_orphaned_terms() {
global $wpdb;
$terms = $wpdb->get_results( "SELECT * FROM $wpdb->terms WHERE term_id NOT IN ( SELECT term_id FROM $wpdb->term_taxonomy )", ARRAY_A );
foreach ( $terms as $term ) {
wp_delete_term( $term['term_id'], $term['taxonomy'] );
}
}
Supprimer les métadonnées de termes orphelins
Les métadonnées de termes orphelins sont des métadonnées qui ne sont plus utilisées par aucun plugin ou thème. Elles peuvent s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les métadonnées de termes orphelins, vous pouvez utiliser la fonction delete_metadata()
.
// Supprime toutes les métadonnées de termes orphelins
function delete_orphaned_term_metadata() {
global $wpdb;
$metas = $wpdb->get_results( "SELECT * FROM $wpdb->termmeta WHERE term_id NOT IN ( SELECT term_id FROM $wpdb->term_taxonomy )", ARRAY_A );
foreach ( $metas as $meta ) {
delete_metadata( 'term', $meta['term_id'], $meta['meta_key'], $meta['meta_value'] );
}
}
Supprimer les métadonnées d'utilisateur orphelines
Les métadonnées d'utilisateur orphelines sont des métadonnées qui ne sont plus utilisées par aucun plugin ou thème. Elles peuvent s'accumuler et prendre beaucoup de place dans votre base de données. Pour supprimer les métadonnées d'utilisateur orphelines, vous pouvez utiliser la fonction delete_metadata()
.
// Supprime toutes les métadonnées d'utilisateur orphelines
function delete_orphaned_user_metadata() {
global $wpdb;
$metas = $wpdb->get_results( "SELECT * FROM $wpdb->usermeta WHERE user_id NOT IN ( SELECT ID FROM $wpdb->users )", ARRAY_A );
foreach ( $metas as $meta ) {
delete_metadata( 'user', $meta['user_id'], $meta['meta_key'], $meta['meta_value'] );
}
}
Optimisation des tables de la base de données
Après avoir supprimé un grand nombre de données, il est bon d'optimiser les tables :
// Optimise toutes les tables de la base de données
function optimize_database_tables() {
global $wpdb;
$tables = $wpdb->get_results( "SHOW TABLES", ARRAY_N );
$tables = array_map( 'reset', $tables );
foreach ( $tables as $table ) {
$wpdb->query( "OPTIMIZE TABLE $table" );
}
}
Suppression des transients expirés
Les transients sont des données stockées dans la base de données qui expirent après un certain temps. Si vous utilisez beaucoup de transients, il est bon de les supprimer lorsqu'ils expirent :
// Supprime tous les transients expirés
function delete_expired_transients() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_timeout\_%' AND option_value < UNIX_TIMESTAMP();");
}
Bien que nous ayons couvert plusieurs techniques essentielles pour améliorer les performances de votre base de données, il est important de noter que ce ne sont là que quelques-unes des nombreuses optimisations possibles. Chaque site est unique, et il peut y avoir d'autres domaines spécifiques à votre site qui nécessitent une attention particulière.
Mention importante L'hébergement joue également un rôle crucial dans les performances de votre site. Un hébergeur performant, tel que WP Engine, peut offrir des environnements optimisés spécifiquement pour WordPress, garantissant ainsi que votre site fonctionne à son meilleur niveau. En choisissant un hébergeur de qualité, vous bénéficiez non seulement d'une infrastructure solide, mais aussi d'outils et de services qui peuvent aider à automatiser et à simplifier de nombreuses tâches d'optimisation.