Co powoduje czas oczekiwania na załadowanie mojego HTMLa?

12

Mam witrynę, która wydaje się ładować bardzo powoli. Kiedy uruchamiam na nim test prędkości, widzę, że przed załadowaniem HTML wydaje się istnieć 6-sekundowa przerwa. Obrazy i skrypty JS ładują się bardzo szybko po tym punkcie.

Na zdjęciu poniżej żółte słupki „czasu oczekiwania”:

Ładowanie pliku HTML trwało ponad 5 sekund, podczas gdy większość innych zasobów ładowała się w czasie poniżej 1 sekundy

Wydaje się, że jest to spójne bez względu na treść HTML na stronie.

Ta strona korzysta z CMS (ModX Revo), więc HTML jest faktycznie przechowywany w bazie danych SQL i wywoływany przez PHP, ale nigdy wcześniej nie spotkałem się z tym problemem.

Czy ktoś wiedziałby, co to powoduje i jak mogę to przyspieszyć?

MeltingDog
źródło
Czy to nowa rzecz? To znaczy, czy te strony działały wcześniej normalnie, a teraz mają słabą wydajność? Czy jest to nowsza instalacja / strona? Czy możesz nam powiedzieć więcej?
closetnoc
1
Jeśli nie ma takiej sieci pośredniczącej, wydaje się, że jest to czas, w którym Twój serwer generuje odpowiedź? Mówisz „bez względu na treść HTML” - treść HTML za pośrednictwem CMS lub dosłownie statyczna strona HTML? Na pewno wypróbowałbym prostą statyczną stronę HTML „Hello World”, jeśli jeszcze tego nie zrobiłeś. Zauważ też, że serwery pingdom znajdują się po drugiej stronie świata do Australii (gdzie zakładam, że jesteś hostowany)?
MrWhite
1
IMO problem dotyczy przede wszystkim tej jednej strony - wydaje się, że generowanie odpowiedzi przez serwer / CMS zajmuje dużo czasu. Nieefektywne zapytanie SQL? Inne strony w Twojej witrynie wydają się stosunkowo szybkie. (?)
MrWhite

Odpowiedzi:

13

Termin techniczny oczekiwania jest określany jako czas do pierwszego bajtu i określa czas reakcji serwera WWW lub innych zasobów sieciowych.

Niektóre typowe powody, dla których warto zobaczyć pierwszy bajt:

  • Przeciążona sieć (zwykle dzielony hosting)
  • Błędna konfiguracja serwerów
  • Odległość od ciebie i serwera (lokalizacja geograficzna odgrywa niewielką rolę)
  • Błędy serwera (chmiel)

Zasadniczo ten problem jest często spotykany w hostingu współdzielonym z powodu dużej liczby stron internetowych i osób odwiedzających je, co oczywiście wydłuża czas bajtów sieci. Inną możliwą przyczyną jest błąd gdzieś w sieci, na przykład przeskok lub ponieważ twój serwer nie znajduje się w miejscu docelowej grupy odbiorców, na przykład serwer „DOBRY” w Wielkiej Brytanii będzie miał mniej bajtów niż serwer w USA kierujący reklamy do użytkowników w Wielka Brytania, ze względu na odległość, jaką dane muszą zostać wysłane i odebrane (zwykle wzrost o około 100-200 ms).

Może czas na nowego gospodarza

W przeszłości musiałem przenosić się z serwera na serwer ze względu na opóźnienie do pierwszego bajtu, możesz być w sytuacji, gdy będziesz musiał wybrać nowego hosta internetowego lub zaktualizować obecny pakiet.

Wiarygodne testowanie

Testowanie szybkości witryny z domowego łącza szerokopasmowego jest bardzo stronnicze, ponieważ może to być problem z brakiem odpowiedzi łącza internetowego na stronę internetową. Powinieneś przetestować swoją witrynę przy użyciu wielu połączeń z wielu serwerów ... Polecam test strony internetowej i przeprowadzenie wielu testów jednocześnie z różnych lokalizacji i wielu na docelowych odbiorcach geograficznych. Zapewni to lepszy przegląd tego, co się dzieje, jeśli to pierwszy bajt, zalecamy skontaktowanie się z hostem internetowym przed czymkolwiek innym.

Pingowanie i śledzenie trasy do serwera

Jeśli spróbujesz uruchomić polecenie ping na serwerze, wyniki mogą zostać wyświetlone lub nie, ping używa ICMP zamiast UDP lub TCP, co oznacza, że ​​nie przypomina odpytywania serwera na porcie 80, na którym będzie uruchomiony Twój httpd. Możesz użyć trasy śledzenia, aby zidentyfikować dowolne serwery na trasie, które mogą powodować wzrost pierwszego bajtu, ponownie ... to nie wysyła zapytania do serwera httpd na porcie 80, a jeśli traceroute używa systemu Windows, użyje ICMP i Mac / Linux maszyny będą korzystały z UDP. Warto przetestować, ponieważ jest to tak szybkie i łatwe do zrobienia, ale jeśli wyniki wrócą dobrze, nie musi to oznaczać, że gdzieś nie ma problemu.

Simon Hayter
źródło
Cześć @ SunWKim Zaktualizowałem swoją odpowiedź o to, o co prosiłeś. Spójrz na dół mojej odpowiedzi.
Simon Hayter
Zgadzam się z twoimi powszechnymi powodami, dla których czas na pierwszy bajt. W tym przypadku jednak; Wierzę, że ma to więcej wspólnego z kodem JavaScript.
niedz.
Pierwszy bajt może być spowodowany szeroką gamą rzeczy, ale JavaScript nie jest jedną z nich, ponieważ odpowiedź nagłówka występuje przed elementami wbudowanymi, takimi jak JavaScript, CSS, obrazy i tak dalej. Nie myl pierwszego bajtu z rzeczywistymi elementami i plikami.
Simon Hayter
Nie mylę tych dwóch. Być może, jeśli odwiedziłeś mbff.com.au i sam zobaczyłeś, możesz być przekonany, że nie jest to kwestia czasu do pierwszego bajtu. Opóźnienie występuje po pierwszej odpowiedzi nagłówka.
niedz.
1
The delay is occurring after the first header responseto nie jest pierwszy bajt. Pierwszy bajt to pierwsza odpowiedź.
Simon Hayter
4

1) Masz Adobe TypeKit, który nie ładuje się asynchronicznie z bieżącym kodem. Spróbuj zastąpić go zaawansowanym kodem asynchronicznym: http://help.typekit.com/customer/portal/articles/649336-embed-code

Ten standardowy kod osadzania wykorzystuje fakt, że tagi blokują dalsze renderowanie strony, aby zapobiec FOUT [Flashowi niestylonego tekstu]. Podczas ładowania skryptu Typekit renderowanie strony jest blokowane, więc tekst nie zacznie się renderować przy użyciu czcionek zastępczych.

2) Przetestuj z nowym TypeKit. Jaki jest teraz czas ładowania? Lepszy? Przejdź do kroku 3.

3) Zamień Google Analytics na zaktualizowany JavaScript, który zapewnia najnowszą składnię asynchroniczną: https://developers.google.com/analytics/devguides/collection/gajs/

4) Test. Czy ładowanie strony jest jeszcze lepsze?

5) Wreszcie rozważ optymalizację obrazów, takich jak pattern.jpg. Przekształciłem go do formatu PNG i mogłem zmniejszyć rozmiar pliku z 199 kB do 56 kB. Skraca to czas otrzymania pliku: https://www.dropbox.com/s/i06jx509bmprhhh/pattern.png?dl=0

Mam nadzieję, że to pomoże.

Słońce
źródło
3

Elementy PHP a elementy inne niż PHP

Jeśli porównasz czasy ładowania zasobów innych niż PHP z czasami ładowania opartymi na PHP, zobaczysz, że serwer szybko reaguje, jeśli PHP nie jest zaangażowany.

Zazwyczaj oznacza to problemy wewnętrzne w skrypcie PHP.

Problem może dotyczyć warstwy PHP lub bazy danych. Korzystanie z zaawansowanych narzędzi do debugowania, takich jak XDebug lub NewRelic, może pomóc w szybkim wykryciu wąskiego gardła.

Problemy z czasem do pierwszego bajtu mogą wynikać z ograniczeń sprzętowych, złej konfiguracji lub nieefektywnego kodu. W przypadku hostingu współdzielonego najprawdopodobniej występują ograniczenia sprzętowe i zła konfiguracja.

W każdym razie rozwiązanie problemu oznacza zwykle jeden lub wszystkie z następujących elementów:

  • Więcej sprzętu
  • Lepsze programowanie
  • Dodaj buforowanie

Szybszy sprzęt to oczywiste, ale często kosztowne rozwiązanie, jeśli masz już dedykowane zasoby.

Lepsze programowanie może nie być możliwe, jeśli problem dotyczy wewnętrznego kodu, którego nie utrzymujesz lub którego brakuje zasobów dla programistów.

Buforowanie pomaga, zmniejszając liczbę żądań, które muszą trafić do podstawowych, słabo działających zasobów.

Testowanie

Podczas korzystania z narzędzi testowych pamiętaj, aby wykonać wiele uruchomień. Skoki sieciowe i tymczasowe serwerów mogą łatwo poprowadzić cię złą ścieżką, więc chcesz spróbować je uśrednić.

Hosting

Jeśli korzystasz z wspólnego konta hostingowego, rozważ przejście na usługi w chmurze lub usługi VPS, aby mieć lepszy wgląd w problemy z wydajnością. O ile nie zastosujesz techniki buforowania (CDN lub usługa typu Cloudflare), poprawianie problemów z wydajnością w masowych współdzielonych systemach hostingowych może być bardzo trudne, ponieważ brakuje wystarczającej kontroli nad serwerem.

jeffatrackaid
źródło
-1

Spróbuj ustawić pliki cookie innych firm na tylko odwiedzane.

Tomek
źródło