Le WordPress d'aujourd'hui, décodé pour les développeurs

Performance

Combien de temps une page WordPress passe-t-elle réellement en attente de la base

Un temps de génération se décompose en trois parts distinctes : attente réseau, exécution des requêtes, traitement PHP pur. Voici comment les séparer.

Par Clément Hadrot • 29 décembre 2025 • 4 min de lecture • Aucun commentaire
Combien de temps une page WordPress passe-t-elle réellement en attente de la base

Un temps de génération de 320 millisecondes s’affiche dans un en-tête Server-Timing, ou dans l’onglet réseau du navigateur. Cette valeur unique cache pourtant trois réalités bien distinctes, chacune répondant à une cause différente et appelant une correction différente. Confondre ces trois parts conduit souvent à optimiser la mauvaise chose.

Ce billet propose de décomposer ce temps total en trois composantes mesurables séparément : le temps passé à attendre que le serveur de base de données réponde sur le réseau, le temps d’exécution proprement dit des requêtes SQL une fois reçues, et le temps de traitement PHP pur, celui qui ne dépend d’aucune base de données.

Première part : la latence réseau vers MySQL

Lorsque WordPress et sa base de données ne partagent pas le même serveur physique, chaque requête effectuée via $wpdb traverse le réseau interne de l’hébergeur avant d’atteindre le moteur MySQL. Cette latence, souvent de l’ordre d’une à quelques millisecondes sur une infrastructure bien conçue, peut grimper significativement si le serveur de base de données est distant géographiquement ou surchargé. Elle se mesure en isolant une requête minimale, du type SELECT 1, chronométrée avec hrtime() juste avant et juste après son exécution :

$debut = hrtime( true );
$wpdb->get_var( 'SELECT 1' );
$latence_reseau = ( hrtime( true ) - $debut ) / 1e6; // en millisecondes

Deuxième part : le temps d’exécution des requêtes

L'essentiel à retenir : Le temps de génération n'est pas un seul bloc homogène ; La latence réseau vers MySQL se mesure séparément de l'exécution ; Isoler chaque part change les priorités de correction

Une fois la latence réseau connue, la différence entre le temps total rapporté par $wpdb->queries (lorsque SAVEQUERIES est activé) et cette latence de base donne une estimation du temps réellement passé par MySQL à exécuter la requête : recherche d’index, tri, jointures. C’est cette part qui bénéficie le plus d’un index bien choisi ou d’une requête réécrite. Un test comparatif mené sur une page d’archive de trois cents articles a donné les résultats suivants :

ComposanteTemps mesuréPart du total
Latence réseau cumulée (18 requêtes)36 ms11 %
Exécution SQL cumulée142 ms44 %
Traitement PHP pur142 ms45 %

Troisième part : le traitement PHP pur

Ce qui reste, une fois soustraites les deux premières parts du temps de génération total, correspond au traitement effectué par PHP sans aucun échange avec la base de données : rendu des blocs, application des filtres et des actions, formatage des dates, échappement des sorties, exécution du thème lui-même. Sur l’exemple ci-dessus, cette part représentait presque la moitié du temps total, une proportion souvent sous-estimée par des équipes qui concentrent leurs efforts d’optimisation sur les seules requêtes SQL.

Pourquoi cette décomposition change les priorités

Sur ce site précis, l’équipe technique avait initialement prévu d’ajouter un cache d’objets persistant pour réduire le temps SQL, en supposant que la base de données était le principal responsable de la lenteur. La décomposition a montré que le traitement PHP pur pesait autant que les requêtes elles-mêmes : une partie de cet effort venait de plusieurs filtres the_content appliqués séquentiellement par différentes extensions, chacune ajoutant son propre traitement du texte affiché.

Comment reproduire cette mesure sur un site

  • Activer temporairement la constante SAVEQUERIES dans wp-config.php, uniquement sur un environnement de test, jamais en production où elle ajoute elle-même un coût.
  • Mesurer une requête minimale de type SELECT 1 pour établir la latence réseau de référence.
  • Comparer le temps de génération total, rapporté par un en-tête Server-Timing personnalisé, avec la somme des deux premières parts pour en déduire le temps PHP pur par soustraction.

Un temps de génération n’est jamais un bloc unique : le décomposer révèle souvent que la moitié du problème ne se trouve pas là où on la cherchait en premier.

En résumé

Séparer la latence réseau, le temps d’exécution SQL et le traitement PHP pur transforme un chiffre global, difficile à interpréter, en trois pistes de correction distinctes. Sur ce site associatif, cette décomposition a réorienté l’effort d’optimisation vers les filtres de contenu plutôt que vers un cache d’objets qui n’aurait résolu qu’une partie du problème.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi