HTTP / 2 ha TTFB molto più alto di HTTP / 1.1


2

Qualcun altro ha riscontrato questo problema con HTTP / 2 su IIS10. Ho una macchina virtuale configurata su Azure con un sito Web su IIS10. Ho impostato SSL ecc. E testato il sito su HTTP / 2, disattivato SSL e testato sullo stesso browser con HTTP / 1.1. Il risultato è stato inaspettato, HTTP / 1.1 ha superato HTTP / 2 BIG TIME!

I test sono stati effettuati dalle stesse macchine, dalla stessa identica pagina Web (contiene molte risorse da caricare) e l'unica cosa che è cambiata è stata il protocollo.

Risultati HTTP / 2: Tempi di caricamento HTTP / 2

Risultati HTTP / 1.1: inserisci qui la descrizione dell'immagine

Come puoi vedere, HTTP / 1.1 supera HTTP / 2 e per me sembra che il server stia impiegando una quantità straordinaria di tempo per rispondere alle richieste (verde - Time to First Byte).

Qualche idea?


Un'ipotesi è che IIS10 e Windows Server 2016 non sono ancora finiti e ci sono problemi con le prestazioni HTTP / 2 ma non sono riuscito a trovare nessun altro a lamentarsene
Daniel Wardin,

Sto usando HTTP / 1.1 non crittografato contro HTTP / 2 crittografato. Pensi che ciò faccia la differenza, se HTTP / 1.1 non crittografato dovrebbe superare HTTP / 2 crittografato?
Daniel Wardin,

Risposte:


2

La differenza sta nel modo in cui HTTP / 1 e HTTP / 2 configurano i socket per la rete.

In HTTP / 1, il browser effettua una richiesta per un singolo asset e quindi attende il download di tale asset prima di effettuare la richiesta successiva. Questo è molto lento, quindi per ovviare a ciò, i browser hanno iniziato a multiplexare le loro richieste e fare 6-8 richieste alla volta, dividendo la larghezza di banda tra quelle 6-8 richieste.

In HTTP / 2, il browser apre un singolo socket, effettua tutte le richieste e quindi attende che tutti gli asset vengano trasmessi in streaming alla massima larghezza di banda disponibile.

Il motivo per cui dovresti vedere un TTFB elevato è perché in HTTP / 1, ogni richiesta è un socket separato, ma in HTTP / 2, tutte le richieste vengono scaricate attraverso il singolo flusso. Potresti aver effettuato le richieste, ma devi attendere che il server risponda con tutti i dati richiesti.

In teoria, HTTP / 2 dovrebbe essere più veloce perché è più efficiente - non hai il sovraccarico di aprire un nuovo socket per ogni richiesta. Stai trasmettendo tutti i dati in streaming su una singola pipe di dati e puoi dare la priorità alle richieste in base al modo in cui la pagina deve essere caricata.

In pratica, ciò dipende dal fatto che il browser effettui correttamente le priorità e la rete che consenta la larghezza di banda completa per il singolo flusso di socket e non limiti artificialmente le richieste.

Inoltre, poiché hai dichiarato che stai eseguendo HTTP / 1 non crittografato e HTTP / 2 crittografato, la crittografia causerà un sovraccarico aggiuntivo e una perdita di prestazioni. Potresti provare a fare HTTP / 1 crittografato per un confronto migliore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.