Corriger et identifier les problèmes de Time to First Byte (TTFB)

Découvrez comment déboguer les problèmes de Time to First Byte sur vos pages en utilisant les données RUM, les en-têtes Server-Timing et une analyse systématique des sous-parties du TTFB.

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-03-05

Trouver et corriger les problèmes de Time to First Byte (TTFB)

Cet article fait partie de notre guide sur le Time to First Byte (TTFB). Le TTFB est une métrique de diagnostic qui mesure le temps écoulé entre la requête d'une page par un utilisateur et la réception du premier octet de la réponse par le navigateur. Bien que le TTFB ne soit pas un Core Web Vital en soi, il influence directement à la fois le First Contentful Paint (FCP) et le Largest Contentful Paint (LCP). Un bon TTFB est inférieur à 800 millisecondes au 75e centile.

Dans notre article précédent, nous avons abordé le Time to First Byte. Si vous souhaitez vous familiariser avec les bases, c'est un excellent point de départ.

Dans cet article, nous nous concentrerons sur l'identification des différents problèmes de Time to First Byte et expliquerons ensuite comment les résoudre.

CONSEIL TTFB : la plupart du temps, le TTFB sera bien pire pour les nouveaux visiteurs puisqu'ils ne disposent pas d'un cache DNS pour votre site. Lors du suivi du TTFB, il est très judicieux de faire la distinction entre les nouveaux visiteurs et les visiteurs récurrents.

Étape 1 : Vérifier le TTFB dans la Search Console

"La première étape vers la guérison est d'admettre que vous avez un problème." Donc, avant de faire quoi que ce soit pour corriger le Time to First Byte, assurons-nous que nous avons réellement un problème avec le TTFB.

Malheureusement, le Time to First Byte n'est pas signalé dans la Google Search Console, nous devons donc nous rabattre sur pagespeed.web.dev pour interroger les données CrUX de notre site. Heureusement, les étapes sont simples : accédez à pagespeed.web.dev, entrez l'URL de votre page, et assurez-vous que le bouton "origin" est coché (puisque nous avons besoin de données à l'échelle du site et pas seulement pour la page d'accueil). Basculez maintenant entre Mobile et Desktop et vérifiez le Time to First Byte pour les deux types d'appareils.

Dans l'exemple ci-dessous, vous verrez un site qui échoue aux Core Web Vitals en raison d'un TTFB élevé.

Étape 1b : Utiliser l'en-tête Server-Timing pour une analyse plus approfondie

L'en-tête de réponse HTTP Server-Timing permet à votre serveur de communiquer les métriques de performance du backend directement au navigateur. Cela permet d'identifier précisément quelle partie du traitement serveur est lente sans avoir besoin d'accéder aux journaux du serveur.

Un en-tête Server-Timing typique ressemble à ceci :

Server-Timing: db;dur=53, app;dur=120, cache;desc="miss"

Dans cet exemple, le serveur signale trois valeurs de temps :

  • db;dur=53 : la requête à la base de données a pris 53 millisecondes.
  • app;dur=120 : la logique de l'application (rendu de modèle, appels API, etc.) a pris 120 millisecondes.
  • cache;desc="miss" : le cache du serveur n'a pas été utilisé pour cette requête (un échec de cache).

Vous pouvez lire ces valeurs dans les Chrome DevTools en ouvrant l'onglet Réseau (Network), en sélectionnant la requête du document et en faisant défiler jusqu'à la section "Server Timing" dans l'onglet Timing. Les valeurs sont également accessibles via l'API PerformanceServerTiming en JavaScript :

const [navigation] = performance.getEntriesByType('navigation');
if (navigation.serverTiming) {
  navigation.serverTiming.forEach(entry => {
    console.log(`${entry.name}: ${entry.duration}ms (${entry.description})`);
  });
}

Si votre serveur n'envoie pas encore d'en-têtes Server-Timing, envisagez de les ajouter. La plupart des frameworks web rendent cela simple. En PHP, vous pouvez ajouter l'en-tête avant toute sortie :

header('Server-Timing: db;dur=' . $dbTime . ', app;dur=' . $appTime);

En Node.js avec Express :

res.setHeader('Server-Timing', `db;dur=${dbTime}, app;dur=${appTime}`);

L'en-tête Server-Timing est particulièrement utile lorsqu'il est combiné au Real User Monitoring, car il vous permet de corréler les performances côté serveur avec le TTFB que les utilisateurs réels expérimentent. Découvrez comment le code 103 Early Hints peut réduire encore davantage le TTFB perçu en envoyant des indices de ressources avant que la réponse complète ne soit prête.

Étape 2 : Configurer le suivi RUM

Le Time to First Byte est une métrique complexe. Nous ne pouvons pas simplement nous fier à des tests synthétiques pour mesurer le TTFB, car dans la vie réelle, d'autres facteurs contribueront aux fluctuations du TTFB. Pour obtenir des réponses à toutes les questions ci-dessus, nous devons mesurer les données en conditions réelles et consigner tous les problèmes qui pourraient survenir avec le Time to First Byte. C'est ce qu'on appelle le Real User Monitoring, et il existe plusieurs façons d'activer le suivi RUM. Nous avons développé CoreDash précisément pour ces cas d'utilisation. CoreDash est un outil RUM abordable, rapide et efficace qui fait le travail. Bien sûr, il existe de nombreuses solutions RUM sur le marché et elles feront également l'affaire (à un prix plus élevé cependant).

Comment appréhender le TTFB : Imaginez qu'un serveur web est la cuisine d'un restaurant et qu'un utilisateur demandant une page web est un client affamé passant une commande. Le Time to First Byte (TTFB) est la durée entre le moment où le client passe sa commande et celui où la cuisine commence à préparer la nourriture.
Le TTFB ne concerne donc PAS la vitesse à laquelle l'ensemble du repas est cuisiné (First Contentful Paint) et servi (Largest Contentful Paint), mais plutôt la réactivité de la cuisine à la demande initiale.
Le suivi RUM revient à interroger les clients pour comprendre leur expérience culinaire. Vous pourriez découvrir que les clients assis plus loin de la cuisine reçoivent moins d'attention du serveur et sont servis plus tard, ou que les clients habituels bénéficient d'un traitement de faveur tandis que les nouveaux visiteurs doivent attendre plus longtemps pour obtenir une table.

Étape 2b : Établir une base de référence des performances

Avant d'apporter des modifications, établissez une base de référence pour votre TTFB. Enregistrez le TTFB au 75e centile sur les dimensions suivantes, car cela vous aidera à mesurer l'efficacité de vos optimisations plus tard :

  1. TTFB global (mobile et desktop séparément) : capturez le 75e centile pour chaque type d'appareil.
  2. Top 10 des pages par trafic : enregistrez individuellement le TTFB pour vos pages à plus fort trafic.
  3. Nouveaux visiteurs vs visiteurs récurrents : les nouveaux visiteurs ont généralement un TTFB plus élevé en raison du DNS et du temps de connexion.
  4. Top 5 des pays par trafic : la distance géographique par rapport à votre serveur affecte considérablement le TTFB.
  5. Répartition des sous-parties du TTFB : enregistrez le 75e centile pour chaque sous-partie (attente, cache, DNS, connexion, requête).

Consignez ces chiffres dans une feuille de calcul. Après avoir implémenté chaque optimisation, attendez au moins 7 jours pour collecter suffisamment de données RUM avant de comparer les résultats. Une bonne approche consiste à traiter une sous-partie du TTFB à la fois, à mesurer, puis à passer à la suivante.

Étape 3 : Identifier les problèmes de Time to First Byte

Bien que le Chrome User Experience Report (CrUX) de Google fournisse de précieuses données de terrain, il n'offre pas de détails spécifiques sur les causes d'un TTFB élevé. Pour améliorer efficacement le TTFB, nous devons savoir exactement ce qui se passe à un niveau plus détaillé. À ce stade, il est judicieux de faire la distinction entre un TTFB défaillant de manière globale et un TTFB défaillant dans des conditions spécifiques (bien qu'en réalité, il y aura toujours un mélange des deux).

3.1 Le TTFB échoue de manière globale

Si le TTFB échoue de manière globale, nous devrons regarder la situation dans son ensemble et déterminer quelles sous-parties du TTFB nous devons améliorer.
  1. Vérifier la présence de "temps de requête" (request times) généralement médiocres : Des temps de requête médiocres signifient que le "problème" vient du temps qu'il faut au serveur pour générer la page. C'est la cause la plus courante des mauvais scores de TTFB.
  2. Vérifier les autres sous-parties médiocres du TTFB : Le TTFB n'est pas seulement une métrique unique, mais il peut être décomposé en plusieurs parties qui ont chacune leur propre potentiel d'optimisation. Si la durée d'attente (waiting duration), la durée de cache (cache duration), la durée de résolution DNS (DNS lookup duration) ou la durée de connexion (connection duration) sont lentes, vous devrez probablement ajuster les paramètres de votre serveur ou commencer à chercher un hébergement de meilleure qualité.
Jetez un œil à cet exemple de données RUM. Il montre clairement que le TTFB est principalement affecté par le "Request Time" (temps de requête). Avec ces données, nous pouvons maintenant commencer à améliorer le TTFB (par exemple en implémentant la mise en cache, en améliorant la qualité du code ou en optimisant les temps de réponse de la base de données).

3.2 Le TTFB échoue dans des conditions spécifiques

Si le TTFB semble échouer dans des conditions spécifiques, nous devons comprendre quelles sont ces conditions afin d'y remédier. Avec le suivi RUM, il est facile d'utiliser la segmentation pour diviser les données TTFB en sous-groupes basés sur des critères spécifiques. Ces critères peuvent être :
  1. Segmentation par pays : Comprendre la distribution géographique d'un TTFB élevé est important, surtout pour les sites web ayant une audience mondiale. Si vous servez vos pages depuis un seul serveur dans un seul pays (sans mise en cache périphérique de CDN), la distance physique entre l'emplacement de l'utilisateur et le serveur hébergeant le site web causera toutes sortes de retards et impactera le TTFB. Envisagez de configurer Cloudflare ou un autre CDN pour rapprocher votre contenu des utilisateurs du monde entier.
  2. Segmentation du cache : La mise en cache peut réduire le TTFB en ignorant la génération côté serveur du HTML. Malheureusement, il est courant que la mise en cache soit désactivée ou contournée pour de nombreuses raisons. Par exemple, la mise en cache peut être désactivée pour les utilisateurs connectés, les pages de panier d'achat, les pages avec des chaînes de requête (par exemple, de Google Ads), les pages de résultats de recherche et les pages de paiement. Si votre site web utilise la mise en cache (en périphérie), utilisez le suivi RUM pour vérifier le taux de réussite du cache.
  3. Segmentation par page (cluster) : La différence de performance du Time to First Byte (ou l'absence de différence) entre les pages ou les types de pages est une autre chose que nous devons déterminer. Savoir quelles pages échouent à la métrique TTFB fournira des informations précieuses sur la façon d'améliorer le Time to First Byte.
  4. Segmentation des redirections : Le temps de redirection s'ajoute directement au TTFB. Chaque redirection ajoute du temps supplémentaire avant que le serveur web ne puisse commencer à charger la page. Mesurer et éliminer les redirections inutiles peut aider à améliorer le TTFB. Pour un aperçu plus approfondi de l'optimisation des redirections, consultez notre guide sur la sous-partie durée d'attente (waiting duration) du TTFB.
  5. Autre segmentation : Bien que la segmentation par les variables ci-dessus couvre les suspects habituels, chaque site est unique et possède ses propres défis. Heureusement, le suivi RUM est conçu pour permettre une segmentation par de nombreuses autres variables telles que la RAM de l'appareil, la vitesse du réseau, le type d'appareil, le système d'exploitation, des variables personnalisées, et bien plus encore.
Dans CoreDash, accédez à la page TTFB et, sur le tableau de données, basculez entre "country" (pays), "repeat visitor" (visiteur récurrent), "logged in status" (statut de connexion) et "redirect count" (nombre de redirections) pour voir si l'un de ces filtres montre une différence de TTFB. Si le TTFB entre un groupe et un autre diffère considérablement, prenez-en note, car c'est là qu'il y a de la place pour l'amélioration.

Étape 4 : Analyser les problèmes en profondeur et les corriger

Maintenant que nous avons identifié les zones problématiques, il est temps de les analyser en profondeur et de corriger les problèmes. Lorsque vous utilisez un outil de suivi RUM (et il n'y a vraiment aucun moyen de mesurer le Time to First Byte de manière fiable sans suivi RUM), vous pouvez facilement créer des filtres pour correspondre aux zones problématiques. Dans CoreDash par exemple, vous pouvez créer des filtres en cliquant sur l'une des valeurs de segment. Appliquez autant de filtres que nécessaire et continuez à examiner les données d'attribution. Les détails de l'attribution sont indiqués dans la répartition du TTFB et montrent les composants de base du TTFB. À partir de cette répartition, CoreDash vous montrera quelles sous-parties du TTFB doivent être optimisées.

Les sous-parties du Time to First Byte (TTFB) sont :

Chacune des sous-parties a son propre ensemble de défis et de solutions que nous abordons dans des articles séparés.

Étape 5 : Liste de contrôle des correctifs rapides pour les problèmes courants de TTFB

En fonction de la sous-partie qui contribue le plus à votre TTFB, voici une référence rapide pour les correctifs les plus courants :

Sous-partie du TTFB Cause la plus courante Correctif rapide
Durée d'attente Redirections inutiles Auditer et éliminer les chaînes de redirection ; implémenter HSTS
Durée de cache Démarrage lent du service worker Simplifier le code du service worker ; utiliser des stratégies de mise en cache efficaces
Durée DNS Fournisseur DNS lent Passer à un fournisseur DNS premium comme Cloudflare ; ajuster les paramètres TTL
Durée de connexion Version TLS obsolète Activer TLS 1.3 et HTTP/3 ; utiliser un CDN pour la proximité
Durée de requête Traitement lent du serveur Implémenter la mise en cache côté serveur ; optimiser les requêtes à la base de données ; utiliser les 103 Early Hints

Mesurer le TTFB avec JavaScript

Vous pouvez mesurer le TTFB complet et ses sous-parties directement dans le navigateur en utilisant l'API Navigation Timing. L'extrait suivant calcule le TTFB et consigne chaque sous-partie :

new PerformanceObserver((entryList) => {
  const [nav] = entryList.getEntriesByType('navigation');
  const activationStart = nav.activationStart || 0;

  const ttfb = nav.responseStart - activationStart;
  const waitingDuration = (nav.workerStart || nav.fetchStart) - activationStart;
  const cacheDuration = nav.domainLookupStart - (nav.workerStart || nav.fetchStart);
  const dnsDuration = nav.domainLookupEnd - nav.domainLookupStart;
  const connectionDuration = nav.connectEnd - nav.connectStart;
  const requestDuration = nav.responseStart - nav.requestStart;

  console.log('TTFB:', ttfb.toFixed(0), 'ms');
  console.log('  Waiting:', waitingDuration.toFixed(0), 'ms');
  console.log('  Cache:', cacheDuration.toFixed(0), 'ms');
  console.log('  DNS:', dnsDuration.toFixed(0), 'ms');
  console.log('  Connection:', connectionDuration.toFixed(0), 'ms');
  console.log('  Request:', requestDuration.toFixed(0), 'ms');
}).observe({
  type: 'navigation',
  buffered: true
});

Ce code fournit la même répartition que celle affichée par des outils comme CoreDash dans le panneau d'attribution du TTFB. L'exécution de cet extrait dans la console du navigateur vous donne une lecture immédiate pour le chargement d'une seule page, tandis que les outils RUM collectent ces données sur des milliers d'utilisateurs réels pour produire des valeurs fiables au 75e centile.

Lectures complémentaires : Guides d'optimisation

Guides connexes :

  • 103 Early Hints : envoyez des indices de ressources avant que la réponse complète ne soit prête, ce qui permet au navigateur de commencer à charger les ressources critiques pendant que le serveur est encore en train de traiter la demande.
  • Configurer Cloudflare pour les performances : configurez le CDN, la mise en cache et les fonctionnalités périphériques de Cloudflare pour réduire le TTFB pour les audiences mondiales.

Sous-parties du TTFB : Guides complets

Chaque sous-partie du Time to First Byte a ses propres stratégies d'optimisation. Commencez par la sous-partie que vos données RUM identifient comme étant le goulot d'étranglement :

The RUM tool I built for my own clients.

CoreDash is what I use to audit enterprise platforms. Under 1KB tracking script, EU hosted, no consent banner. AI with MCP support built in. The same tool, available to everyone.

Create Free Account
Corriger et identifier les problèmes de Time to First Byte (TTFB)Core Web Vitals Corriger et identifier les problèmes de Time to First Byte (TTFB)