W poprzednim wpisie pokazałem porównanie wydajności HTTP/2 i HTTP/1 z użyciem pojedynczego połączenia (zobacz Wydajność HTTP/2 vs HTTP/1). W tym wpisie pokażę porównanie HTTP/2 i HTTP/1 z wprowadzonym opóźnieniem oraz to, jak opóźnienie może wpływać na żądania protokołu HTTP.
Gdy klient wykonuje żądanie, występuje pewne opóźnienie, mniejsze lub większe w zależności od warunków sieciowych (ruch, odległość od serwera...). Opóźnienie znacząco wpływa na protokół HTTP 1.1, ponieważ jeśli musisz wysłać wiele żądań, musisz najpierw wysłać żądanie, poczekać na odpowiedź serwera, wykonać kolejne żądanie i tak dalej... Oczywiście możesz użyć więcej niż 1 połączenia, ale to wymaga większych zasobów serwera i źle się skaluje.
Protokół HTTP/2 używa pojedynczego połączenia do wykonywania wszystkich żądań, więc opóźnienie ma mniejszy wpływ — możesz wysłać wiele żądań bez oczekiwania na ich przetworzenie, dzięki czemu proces jest znacznie szybszy.
Test opóźnienia HTTP/2
Używam darmowego serwera testowego HTTP/2 Golang, aby pokazać, jak opóźnienie wpływa na HTTP/2 w porównaniu z HTTP/1.
Przy użyciu protokołu HTTP/2 wystarczy wysłać wszystkie żądania do serwera i przetworzyć odpowiedzi asynchronicznie. Proces jest bardzo szybki i trwa mniej niż 1 sekundę.
W protokole HTTP/1 żądania są wysyłane jedno po drugim i przed wysłaniem kolejnego żądania trzeba czekać na odpowiedź serwera, więc proces jest powolny.

Możesz pobrać już skompilowany przykład demonstracyjny sgcWebSockets dla Windows z poniższego linku. Wystarczy przetestować różne opcje i porównać wydajność obu protokołów.
