Jak mogę skrócić czas oczekiwania (ttfb)

114

Mam zapytanie, które polega na pobraniu listy użytkowników z tabeli w posortowanej kolejności na podstawie czasu jej utworzenia. Otrzymałem następujący diagram czasowy z narzędzi programistycznych Chrome.

rozrząd z chromu

Widać, że TTFB (czas do pierwszego bajtu) jest za wysoki.
Nie jestem pewien, czy dzieje się tak z powodu sortowania SQL. Jeśli to jest powód, jak mogę skrócić ten czas?
A może to z powodu TTFB. Widziałem blogi, które mówią, że TTFB powinno być mniejsze (<1 s). Ale dla mnie pokazuje> 1 sek. Czy to z powodu mojego zapytania czy czegoś innego?
Nie wiem, jak mogę skrócić ten czas.
Używam kątowego. Czy powinienem używać kątowego do sortowania tabeli zamiast sortowania SQL? (wiele postów mówi, że to nie powinno być problemem)
Chcę wiedzieć, jak mogę zmniejszyć TTFB. Chłopaki! Właściwie jestem w tym nowy. Jest to zadanie powierzone mi przez członków mojego zespołu. Nie jestem pewien, jak mogę skrócić czas TTFB. Widziałem wiele postów, ale nie byłem w stanie poprawnie zrozumieć. Co to jest TTFB. Czy to czas zajęty przez serwer?

govindpatel
źródło
8
Twoje pytanie pokazuje brak zrozumienia, co się tutaj dzieje. To czas oczekiwania na serwer, więc to, czy używasz AngularJS, czy innego frameworka, nie ma znaczenia. Jeśli chcesz ulepszyć kod po stronie serwera, musisz nam go pokazać.
dirkk
@govindpatel, jeśli moja odpowiedź poniżej pomogła Ci lub uważasz, że odpowiada na pytanie, zaznacz ją jako poprawną;)
Daniel T. Sobrosa
W przypadku prostego sortowania tabel (zakładając, że dane w tabeli zostały już pobrane, a dane są po prostu używane przez inną właściwość), znacznie szybciej będzie to zrobić po stronie klienta niż wysłać kolejne żądanie posortowanych danych.
Richik SC

Odpowiedzi:

116

TTFB nie jest czasem do pierwszego bajtu treści odpowiedzi (tj. Użytecznych danych, takich jak: json, xml itp.), Ale raczej czasem do pierwszego bajtu odpowiedzi otrzymanej z serwera. Ten bajt jest początkiem nagłówków odpowiedzi.

Na przykład, jeśli serwer wyśle ​​nagłówki przed wykonaniem ciężkiej pracy (jak ciężki SQL), otrzymasz bardzo niskie TTFB, ale nie jest to „prawda”.

W twoim przypadku TTFB reprezentuje czas spędzony na przetwarzaniu danych na serwerze.

Aby zmniejszyć TTFB, musisz szybciej pracować po stronie serwera.

Daniel T. Sobrosa
źródło
2
Aby dokładniej zdiagnozować czasy zachodzące podczas TTFB, możesz użyć metod pomiaru czasu po stronie serwera (np. Timerów konfiguracji lub dziennika debugowania), aby debugować czas spędzony na każdej logice.
Raptor
1
Zajrzyj do tego artykułu, szczegółowo objaśnia problem i zawiera porady dotyczące możliwych rozwiązań: websiteoptimization.com/speed/tweak/time-to-first-byte
LucaM
Uważaj na traktowanie TTFB jako najważniejszego punktu: blog.cloudflare.com/…
Owen Blacker
Jeśli ta odpowiedź Ci pomoże @govindpatel, zaznacz ją jako właściwą odpowiedź, proszę;)
Daniel T. Sobrosa
16

Spotkałem ten sam problem. Mój projekt działa na serwerze lokalnym. Sprawdziłem mój kod php.

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

Używam localhostdo łączenia się z moją lokalną bazą danych. To może być przyczyną problemu, który opisujesz. Możesz zmodyfikować swój HOSTSplik. Dodaj linię

127.0.0.1 localhost.

CH Chow
źródło
5
Dziękuję Ci. Byłem zmianę localhost(TTFB: 1s) do127.0.0.1 (TTFB: 12ms)
panie Black
W moim przypadku ta odpowiedź też pomogła: TTFB 2,39 s -> TTFB 110 ms. Dlaczego ktoś to odrzucił?
Martin Pabst
Myślę, że to też naprawiło to dla mojej aplikacji Spring-Boot, używam bazy danych Postgres w Docker-Container, TTFB trwało do 10s, teraz to tylko około 40ms :)
Sepultura
Dlaczego "localhost" trwa o wiele dłużej?
showdev
14

TTFB to coś, co dzieje się za kulisami. Twoja przeglądarka nie wie nic o tym, co dzieje się za kulisami.

Musisz przyjrzeć się, jakie zapytania są uruchamiane i jak witryna łączy się z serwerem.

Ten artykuł może pomóc w zrozumieniu TTFB, ale poza tym musisz dokładniej zagłębić się w swoją aplikację.

Pureferret
źródło
4

Proponuję przeczytać ten artykuł i skupić się bardziej na tym, jak zoptymalizować ogólną odpowiedź na żądanie użytkownika (strona, wynik wyszukiwania itp.)

Dobrym argumentem za tym jest podany przez nich przykład użycia programu gzip do skompresowania strony. Mimo że ttfb jest szybszy, gdy nie kompresujesz, ogólne wrażenia użytkownika są gorsze, ponieważ pobieranie nieskompresowanej zawartości zajmuje więcej czasu.

Mikrofon
źródło
Koniecznie sprawdź sekcję komentarzy w tym artykule. Wiele osób podaje przekonujące powody, by martwić się TTFB.
Zack Macomber,
4

Jeśli używasz PHP, spróbuj użyć <?php flush(); ?>after </head>i before </body>lub dowolnej sekcji, którą chcesz szybko wyświetlić (na przykład nagłówek lub treść). Wyświetli rzeczywisty kod bez czekania na zakończenie php. Nie używaj tej funkcji przez cały czas, w przeciwnym razie wzrost prędkości nie będzie zauważalny.

Więcej informacji

Matías Pizarro
źródło