Načtení HTML z hostingu za méně než 80 ms

Načtení HTML z hostingu za méně než 80 ms
« kdy: 12. 07. 2025, 09:51:14 »
Mám takový dotaz.

Na hosting serveru (Rosti.cz) mi bezi pres Gunicorn moje Python Flask aplikace, Gunicorn je schovany za nginx.

  • Moje aplikace mi vrati vyrenderovaný index.html za 130ms.
  • Když ten stejný index.html vrátím přes Flask jako statický soubor (bez renderu), tak to trvá 80ms.
  • A když ten samý index.html nechám vrátit přes NGninx, který tam běží, tak to trvá rovněž 80ms.

Soubor má velikost přesně 22kB.

Chrome DevTools Network říká, že:

Kód: [Vybrat]
Waiting for server response: 79ms
Content download: 1ms

Otázka / Problém č. 1

Vím, že 80ms response pro webovku není moc, ale stejně mi to přijde až příliš, čekal bych míň - co se to tam děje, že to tak trvá?


Otázka / Problém č. 2

Občas to trvá i 267ms, a to když se dělá handshake. Potom DevTools píše navíc tyto přidané časy:

Kód: [Vybrat]
DNS lookup: 90ms
Initial Connection: 90ms
SSL: 50ms


Opět, přijde mi to jako dlouhá doba. Vím, že je to dobrý, ale čekal bych míň.

Neexistuje nějaký hosting, který by to dokázal snižit třeba na půlku nebo i na víc?



Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #1 kdy: 12. 07. 2025, 11:26:10 »
Jestli to chceš zkoumat detailně, podíval bych se na to skrz wireshark u browseru nebo na serveru, tam ty milisekundy můžeš zkoumat miliskopem.
to je provokace?existují i  kombinace , kdy uživateli trvá  300ms  nebo 600ms s DNS lookupem když je to přes port forwarding. (přímo na server 300ms/70ms).

Ale ten čas se skládá z mnoho částí ,to asi víš, a kde konkrétně hledáš problém (hosting, aplikace, síť: tranzit, klient, server)? a taky hraje roli, jestli jde o první načtení nebo několikáte, protože ono se "cachuje" na víc úrovních: DNS, SSL(ticket, 0rtt), TCP, keepalive.

Roli hraje latence (bych řekl především), TLS přidává RTT, násobí se to.

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #2 kdy: 12. 07. 2025, 11:59:45 »
Jste autorem té aplikace? Je potřeba tu aplikaci profilovat - buď na srovnatelném hardware a se srovnatelným objemem dat, anebo přímo na hostingu, pokud to je technicky a provozně možné. V aplikaci je nutno vyřešit, aby to bylo dost rychlé. Pokud chcete mít data na klientovi do 80ms a 50ms bude trvat přenos dat, tak ať aplikace html vygeneruje do 30ms. Profiller zobrazí, kde aplikace tráví nejvíc času, podle toho příslušnou část aplikace upravíte (upravíte dotazy do databáze, databázové indexy, vylepšíte zpracování dat, některá data si připravíte předem, použijete vhodnější datové struktury apod.). Pokud budete data přenášet komprimovaně, ušetříte na přenosu dat, takže se přenesou třeba za 15ms a zbyde vám větší rezerva pro aplikaci. Toto byste měl udělat vždy, nestojí to skoro nic, stačí přidat kompresi do konfigurace nginx. Klient ovšem musí mít pro kompresi podporu a vyžádat si data komprimovaná, což je ale dnes většinou standard (prohlížeče to mají defaultně zapnuté, u REST klientů to lze zapnout).

Pak můžete ladit dál - když na generovaný obsah, který se moc nemění, zapnete cachování na straně serveru, tak aplikace nebude muset data  vůbec generovat a po dobu životnosti cache se pak bude uplatňovat pouze čas nutný pro přenos - takže v příkladu výše dostanete data  za 15ms. Je potřeba se zabývat tím, která data cachovat a jak dlouho. Cachovat může nginx anebo přímo aplikace.

Zejména u webových aplikací můžete dále zlepšit odezvu tím, že budete klientovi posílat správné cache hlavičky, pak může cachovat i klient přímo u sebe, typicky se vyplatí u webových aplikací cachovat css, js a grafické assety (ikony, písma, pozadí, ...). Klient pak vyrenderuje celou stránku rychleji a zlepší se uživatelský dojem.

Akorát je potřeba myslet na to, že přestože má klient data v cache, může posílat aplikaci dotaz na příslušné resource a zpracovávat http hlavičky, kde bude uvedené, zda se resource od minula změnil nebo nezměnil. Tento round-trip musí být pro stav "nezměněno" co nejrychlejší, protože pokud bude klient čekat na odpověd stejně dlouho, jako na plná data, tak se ušetří pouze čas nutný na přenos dat, avšak čekání zůstane.

Pokud nejste autorem aplikace
a nemáte možnost spolupracovat s autorem, můžete hledat, zda není úzké hrdlo na hostingu. Bohužel parametry hostingu se v čase mění, nejlepší postup je vyzkoušet několik hostingů a provést standardizované měření a podle toho se rozhodnout. Nezřídka se mi stalo, že hosting šel kvalitativně dolů a bylo potřeba upradovat balíček nebo přejít jinam. Záruky vyhrazeného výkonu dostanete totiž jen na dedikovaném hostingu nebo přímo na dedikovaném hardware, cena je ale logicky vyšší.

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #3 kdy: 12. 07. 2025, 12:02:11 »
No a co teda těch 80ms na 22kB soubor vracený přes Nginx,  dá se to ještě snížit?

hknmtt

  • ****
  • 307
    • Zobrazit profil
    • E-mail
Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #4 kdy: 12. 07. 2025, 12:46:49 »
Pozri sa na podrobnejsi vypis casu. Ja vidim u mna napriklad dva subory 40kb a 33kb z rovnakeho serveru, je 56ms a 160ms lebo ten 160ms robi znovu pripojenie a cakanie, lebo webstranka taha desiatky suborov a aj ked to prehlaidac taha paralelne, netyka sa to vsetkych suborov ale len casti. Skus ten subor nacitat na priamo, takze sa ti nestahuje nic ine. Vtedy by si mal vidiet najrelevantnejsie casy.


Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #5 kdy: 12. 07. 2025, 14:09:22 »
Mám takový dotaz.

Na hosting serveru (Rosti.cz) mi bezi pres Gunicorn moje Python Flask aplikace, Gunicorn je schovany za nginx.

  • Moje aplikace mi vrati vyrenderovaný index.html za 130ms.
  • Když ten stejný index.html vrátím přes Flask jako statický soubor (bez renderu), tak to trvá 80ms.
  • A když ten samý index.html nechám vrátit přes NGninx, který tam běží, tak to trvá rovněž 80ms.

Soubor má velikost přesně 22kB.

Chrome DevTools Network říká, že:

Kód: [Vybrat]
Waiting for server response: 79ms
Content download: 1ms

Otázka / Problém č. 1

Vím, že 80ms response pro webovku není moc, ale stejně mi to přijde až příliš, čekal bych míň - co se to tam děje, že to tak trvá?


Otázka / Problém č. 2

Občas to trvá i 267ms, a to když se dělá handshake. Potom DevTools píše navíc tyto přidané časy:

Kód: [Vybrat]
DNS lookup: 90ms
Initial Connection: 90ms
SSL: 50ms


Opět, přijde mi to jako dlouhá doba. Vím, že je to dobrý, ale čekal bych míň.

Neexistuje nějaký hosting, který by to dokázal snižit třeba na půlku nebo i na víc?

Schválně jsem se podíval na svůj blog:

blokováno: 0 ms
odezva DNS: 0 ms
připojování: 3 ms
navázání SSL spojení: 15 ms
odesílání: 0 ms
čekání: 50 ms
záskávání: 1 ms


Je to klasická Java EE, stránka se generuje pomocí JSP a texty se tahají z DB. HTML má 21,89 kB. Následně se ještě dotáhnout nějaké obrázky atd.

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #6 kdy: 13. 07. 2025, 07:00:35 »
Mi trva tvuj blog frantiskovo.cz:

141ms Wait for server response
6.76ms content download


Vše ostatní je pod 1ms. LTE Home Internet od TMobile, 20+ Mbps

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #7 kdy: 13. 07. 2025, 17:18:16 »
Mi trva tvuj blog frantiskovo.cz

To není správná doména. U sebe vidím 37 ms čekání + 2 ms stahování.

Nebo to počítáš včetně obrázků atd.? Celkově se stáhne 903,46 kB (včetně obrázků na titulní straně).

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #8 kdy: 27. 07. 2025, 14:17:58 »
Prvy krat spustene bez cache
Bras Presov, optika od telekomu, ping na 8.8.8.8, 15ms
« Poslední změna: 27. 07. 2025, 14:26:00 od darebacik »

Re:Načtení HTML z hostingu za méně než 80 ms
« Odpověď #9 kdy: 27. 07. 2025, 14:32:22 »
Tak este raz s vyp. pluginmi a cistou cache