Optymalizowałem czas wczytywania strony w witrynie. Jednym ze sposobów było połączenie wielu żądań HTTP dla CSS w jedno połączone żądanie HTTP. Ale jeden z recenzentów zadał interesujące pytanie: czy paralelizacja pobierania wielu plików CSS nie skróciłaby czasu ładowania strony?
Nigdy nie zastanawiałem się nad tą opcją, ponieważ jedyne, co czytam w Internecie, to to, że zmniejszenie liczby (blokujących) żądań HTTP jest kluczem do szybszej strony internetowej (chociaż Google Pagespeed Insights nie wydaje się jasno to określać 1 ).
Widzę kilka powodów, dla których paralelizacja nie poprawiłaby wydajności lub miała tylko bardzo małe znaczenie (przewaga korzyści z używania mniejszej liczby żądań HTTP):
- Ustanowienie nowego połączenia jest kosztowne. Chociaż konfigurowanie wielu połączeń może odbywać się równolegle, przeglądarki używają co najwyżej około 4-6 połączeń (w zależności od przeglądarki), więc równoległe pobieranie CSS zablokowałoby pobieranie innych zasobów, takich jak JavaScript i obrazy.
- Konfiguracja połączenia HTTPS wymaga dodatkowych danych. Przeczytałem, że może to być z łatwością kilka KB danych. To dodatkowe dane, które należy przesłać przewodowo, zamiast CSS, który faktycznie chcemy wysłać.
- Ze względu na algorytm TCP Slow Start, im więcej danych zostanie wysłanych przez połączenie, tym szybsze będzie połączenie. Tak długo trwające połączenia faktycznie wysyłałyby dane znacznie szybciej niż nowe połączenia. Zobacz na przykład protokół SPDY, który wykorzystuje pojedyncze połączenie w celu poprawy czasów ładowania strony.
- TCP jest abstrakcją: nadal istnieje (zwykle) tylko jedno podstawowe połączenie. Tak więc, gdy używanych jest wiele żądań, dane przesyłane przewodowo niekoniecznie korzystają z wielu połączeń w celu poprawy prędkości.
- Połączenia internetowe są z natury zawodne, zwłaszcza na urządzeniach mobilnych. Jedno żądanie może zostać zakończone znacznie szybciej niż drugie. Korzystanie z wielu żądań CSS oznacza, że renderowanie strony internetowej jest blokowane do czasu zakończenia ostatniego żądania, co może być znacznie późniejsze niż przeciętne połączenie.
Czy jest więc jakaś korzyść z równoległego żądania HTTP dla plików CSS?
Uwaga / aktualizacja: wszystkie pliki CSS blokują renderowanie. Pliki CSS, które nie zostały jeszcze przeniesione poza ścieżkę krytyczną.