Wie kann ich die Wartezeit (ttfb) reduzieren?

113

Ich habe eine Abfrage, bei der eine Liste der Benutzer aus einer Tabelle in sortierter Reihenfolge abgerufen wird, basierend auf dem Zeitpunkt, zu dem sie erstellt wurde. Ich habe das folgende Zeitdiagramm von den Chrome-Entwicklertools erhalten.

Timing aus dem Chrom

Sie können sehen, dass TTFB (Zeit bis zum ersten Byte) zu hoch ist.
Ich bin nicht sicher, ob es an der SQL-Sortierung liegt. Wenn dies der Grund ist, wie kann ich diese Zeit verkürzen?
Oder liegt es am TTFB? Ich habe Blogs gesehen, in denen steht, dass TTFB weniger sein sollte (<1 Sek.). Aber für mich zeigt es> 1 Sek. Liegt es an meiner Anfrage oder an etwas anderem?
Ich bin mir nicht sicher, wie ich diese Zeit verkürzen kann.
Ich benutze eckig. Sollte ich eckig verwenden, um die Tabelle anstelle von SQL zu sortieren? (Viele Beiträge sagen, dass dies nicht das Problem sein sollte.)
Ich möchte wissen, wie ich TTFB reduzieren kann. Jungs! Ich bin eigentlich neu in diesem Bereich. Es ist die Aufgabe, die mir meine Teammitglieder gegeben haben. Ich bin nicht sicher, wie ich die TTFB-Zeit reduzieren kann. Ich habe viele Beiträge gesehen, konnte sie aber nicht richtig verstehen. Was ist TTFB? Ist es die Zeit, die der Server benötigt?

Govindpatel
quelle
8
Ihre Frage zeigt einen Mangel an Verständnis dafür, was hier vor sich geht. Dies ist die Zeit, die auf den Server wartet. Ob Sie AngularJS oder ein anderes Framework verwenden, spielt also keine Rolle. Wenn Sie den serverseitigen Code verbessern möchten, müssen Sie uns den Code tatsächlich zeigen.
Dirkk
@govindpatel, wenn meine Antwort unten Ihnen geholfen hat oder Sie denken, dass sie die Frage beantwortet, markieren Sie sie bitte als die richtige Antwort;)
Daniel T. Sobrosa
Bei der einfachen Tabellensortierung (vorausgesetzt, die Tabellendaten wurden bereits abgerufen und Sie greifen nur auf eine andere Eigenschaft zurück) ist es viel schneller, sie clientseitig durchzuführen, als eine weitere Anforderung für sortierte Daten zu senden.
Richik SC

Antworten:

115

Der TTFB ist nicht die Zeit bis zum ersten Byte des Antwortkörpers (dh die nützlichen Daten wie json, xml usw.), sondern die Zeit bis zum ersten Byte der vom Server empfangenen Antwort. Dieses Byte ist der Anfang der Antwortheader.

Wenn der Server beispielsweise die Header sendet, bevor er die harte Arbeit erledigt (wie z. B. schweres SQL), erhalten Sie einen sehr niedrigen TTFB, der jedoch nicht "wahr" ist.

In Ihrem Fall repräsentiert TTFB die Zeit, die Sie mit der Verarbeitung von Daten auf dem Server verbringen.

Um den TTFB zu reduzieren, müssen Sie die serverseitige Arbeit schneller erledigen.

Daniel T. Sobrosa
quelle
2
Um die während des TTFB auftretenden Timings weiter zu diagnostizieren, können Sie serverseitige Timing-Methoden (z. B. Setup-Timer oder Debug-Protokoll) verwenden, um die für jede Logik aufgewendete Zeit zu debuggen.
Raptor
1
Schauen Sie sich diesen Artikel an, er erklärt das Problem im Detail und gibt Ratschläge für mögliche Lösungen: websiteoptimization.com/speed/tweak/time-to-first-byte
LucaM
Hüten Sie sich davor, TTFB als den wichtigsten Punkt zu behandeln: blog.cloudflare.com/…
Owen Blacker
Wenn diese Antwort Ihnen @govindpatel hilft, markieren Sie sie bitte als die richtige Antwort;)
Daniel T. Sobrosa
16

Ich habe das gleiche Problem getroffen. Mein Projekt läuft auf dem lokalen Server. Ich habe meinen PHP-Code überprüft.

$db = mysqli_connect('localhost', 'root', 'root', 'smart');

Ich verwende localhost, um eine Verbindung zu meiner lokalen Datenbank herzustellen. Das ist vielleicht die Ursache des Problems, das Sie beschreiben. Sie können Ihre HOSTSDatei ändern . Fügen Sie die Zeile hinzu

127.0.0.1 localhost.

CH Chow
quelle
5
Danke. Ich wurde geändert localhost(TTFB: 1s) zu 127.0.0.1(TTFB: 12ms)
Mr. Black
In meinem Fall hat auch diese Antwort geholfen: TTFB 2,39 s -> TTFB 110 ms. Warum hat es jemand abgelehnt?
Martin Pabst
Ich denke, das hat es auch für meine Spring-Boot-Anwendung behoben. Ich verwende eine Postgres-Datenbank in einem Docker-Container. TTFB war bis zu 10 Sekunden lang, jetzt sind es nur noch etwa 40 ms :)
Sepultura
Warum dauert "localhost" so viel länger?
Showdev
14

TTFB passiert hinter den Kulissen. Ihr Browser weiß nichts darüber, was hinter den Kulissen passiert.

Sie müssen untersuchen, welche Abfragen ausgeführt werden und wie die Website eine Verbindung zum Server herstellt.

Dieser Artikel könnte helfen, TTFB zu verstehen, aber ansonsten müssen Sie tiefer in Ihre Anwendung eintauchen.

Pureferret
quelle
4

Ich würde vorschlagen, dass Sie diesen Artikel lesen und sich mehr darauf konzentrieren, wie Sie die Gesamtantwort auf die Benutzeranfrage optimieren können (entweder eine Seite, ein Suchergebnis usw.).

Ein gutes Argument dafür ist das Beispiel, das sie über die Verwendung von gzip zum Komprimieren der Seite geben. Obwohl ttfb schneller ist, wenn Sie nicht komprimieren, ist die Gesamterfahrung des Benutzers am schlechtesten, da das Herunterladen von Inhalten, die nicht komprimiert sind, länger dauert.

Mike
quelle
Lesen Sie unbedingt den Kommentarbereich dieses Artikels. Viele Leute geben zwingende Gründe an, sich mit TTFB zu befassen.
Zack Macomber
4

Wenn Sie PHP verwenden, versuchen Sie, <?php flush(); ?>nach </head>und vor </body>oder einen beliebigen Abschnitt zu verwenden, den Sie schnell ausgeben möchten (z. B. den Header oder den Inhalt). Es wird den eigentlichen Code ausgeben, ohne auf das Ende von PHP zu warten. Verwenden Sie diese Funktion nicht ständig, da sonst die Geschwindigkeitssteigerung nicht spürbar wird.

Mehr Info

Matías Pizarro
quelle