web-dev-qa-db-fra.com

Comment réduire le "Temps pour le premier octet" sur mon site?

si vous allez à la page d'accueil, vous verrez qu'avant le chargement de la page, le navigateur attend ...

Comment je pourrais réduire Temps pour le premier octet ?

enter image description here

16
sparkle

Personne ne peut vous donner une réponse détaillée sans que vous ne montriez le code responsable de la génération du contenu du site - car c’est là que se trouve le délai.

Cependant, puisque le site utilise php, vous utilisez probablement output buffering

Dans ce cas, le code suivant donnera un TTFB de (latence réseau +) 2s:

<?php ob_start(); ?>
<!doctype html>
<html>
    <head>
        <title>Slow to Load, Slow to finish</title>
    </head>
    <body>
    <?php 
        sleep(2); // Simulate slow processing
        echo "Body"
    ?>
    </body>
</html>

Considérant que cela vous donnera un TTFB de (latence du réseau +) 0:

<!doctype html>
<html>
    <head>
        <title>Fast to load, Slow to finish</title>
    </head>
    <body>
        <?php ob_start(); ?>
        <?php 
            sleep(2); // Simulate slow processing
            echo "Body"
        ?>
    </body>
</html>

Le temps nécessaire pour charger la page entière est le même dans les deux cas - uniquement lorsque le délai est modifié. Si vous vous concentrez sur la réduction de la TTFB (pourquoi), cela devrait vous donner suffisamment d’informations pour que vous puissiez approfondir vos recherches.

IMPORTANT: Il y a beaucoup de modifications à apporter au système que vous devriez faire avant de vous concentrer sur TTFB.

15
AD7six

Le retard est dû au script côté serveur qui génère la page d'index.

En regardant rapidement votre site Web, je devine qu’il utilise PHP. Ainsi, le retard est causé par quelque chose contenu dans votre script index.php.

L'hébergement, le réseau, le matériel et le serveur HTTP (Apache) n'en sont certainement PAS la cause. Votre graphique montre que les fichiers statiques (.css, .js, etc.) sont livrés assez rapidement.

Donc, pour plus de détails, vous devriez fournir plus d’informations (l’exécution lente d’index.php peut avoir de nombreuses raisons…).

3
Frunsi

J'ai eu affaire à énorme TTFB (8 à 10 secondes) et à la recherche désespérée d'une solution. Après avoir cherché et cherché sans succès, j'ai décidé de examiner de plus près le code PHP et les index de base de données

La solution de tampon de sortie abaisse mon TTFB un peu mais pas assez. J'ai eu à nouveau des plaintes d'utilisateurs. 

Le vrai problème est le temps de traitement du serveur (requêtes DB et boucles PHP) et la source HTML que vous avez générée.

Maintenant, je suggère de prendre ces mesures:

  1. Jetez un coup d'œil aux index de la base de données. Assurez-vous d'utiliser les index proper pour "toutes les données" que vous renvoyez. Utilisez Explain pour vérifier si votre index est utilisé, lequel est utilisé et comment il est utilisé.

Dans mon cas, je retourne un tableau d'objets et j'ai vérifié mes index pour ma table principale. Tout semblait OK mais j'ai oublié que mes objets incluent d'autres objets plus petits provenant d'autres tables. Ces tables n'étaient pas correctement indexées. D'où mon énorme TTFB. Je passe juste de 8 à 2 secondes en ajoutant simplement le bon index aux bons tableaux. 

  1. Regardez votre code PHP. 

Vous pouvez avoir des boucles en boucle dont le traitement peut être lent. Vous devez utiliser un framework PHP MVC. Votre choix. Je n'en nommerai aucun. 

Évitez un tel code même s'il fonctionne. Je sais, certains programmeurs PHP4 diront que c'est bon. :)

$query = "SELECT something FROM table";
$result = mysqli_query($mysqli, $query);

if($result) {
    while($row = mysqli_fetch_assoc($result)) {
        $query = "UPDATE other_table SET something_else = "'.$row['something'].'";
        $result2 = mysqli_query($mysqli, $query)
    }
}
  1. Faites attention au code HTML généré par .

Par exemple, vous générez du code Javascript par le biais de PHP boucles. La logique est OK. Le temps de chargement n'est pas. Disons que vous retournez 100 lignes dans une table. Pour chaque ligne, vous n'avez que 5 actions possibles (changement de statut, modification, suppression, duplication, impression). Cela signifie que 5 dialogues jQuery (div HTML, avec contrôles) et 5 scripts JS se multiplient par 100 lignes = des milliers de lignes de code à écrire sur cette page. Mon cas, plus de 32.000 lignes sur un code HTML de 4 Mo . Je viens de passer de 2 à moins d'une seconde après avoir mis tous ces dialogues sur les fonctions JS appropriées. 

En conclusion, (si vous lisez encore ceci :)) ne cherchez pas certaines fonctions magiques pour réduire votre TTFB. Recherchez votre code et votre base de données.

PS: D'autres éléments contribueront à augmenter la vitesse: mise en cache et compression du navigateur, utilisation de CDN, réduction du code HTML, CSS et JS, analyse différée de JavaScript, combinaison d'images dans des sprites CSS, etc. Utiliser Google Page speed et Google Audits pour plus de suggestions de performances. 

3
Adrian P.

Les erreurs dans .htaccess peuvent également augmenter considérablement la durée de vie de TTFB.

J'ai dû supprimer quelques anciennes lignes de code laissées par Wordfence pour résoudre mon TTFB de 8 à 12 secondes (maintenant 500 ms).

1
Supaiku

Je pense que cela dépend des outils que vous utilisez pour mesurer ce type de données. Quand j'ai utilisé webpagetest.org - le temps nécessaire au premier octet était de 292 ms, ce qui est bien. Peut-être devriez-vous relancer votre chèque?

Une partie de ce nombre dépend du serveur - plus vous devez faire de sauts - plus ce nombre est élevé. Il s’agit également du matériel et de la connectivité du serveur - c’est généralement quelque chose que vous ne pouvez pas contrôler. Vous voudrez peut-être rechercher d'autres hôtes, mais je commencerai par quelques tests supplémentaires: demandez à vos amis de tester votre site sur webpagetest.org (ou similaire) et de voir quelles valeurs ils obtiennent.

0
Alex Holsgrove