Я создал очень простую веб-страницу:

<html>
<body>
foo bar
<img src="img1.png"/>
<img src="img2.png"/>
<img src="img3.png"/>
Hello world
</body>
</html>

И каждое изображение представляет собой простой цветной квадрат размером 900 байт (помещается в один TCP-пакет каждый).

Затем я использовал wireshark для записи пакетов TCP, я ожидал, что будет только одно соединение / поток, однако их было 3. Первый запросил HTML-файл, получил ответ, затем запросил img1.png и получил ответ. Другие 2 соединения получили img2 и img3 каждое. Два других соединения были сделаны до того, как закончилось первое.

Я думал, что с HTTP 1.1 не нужно иметь несколько соединений TCP? Почему браузер просто не продолжает использовать первое соединение, конечно, это дешевле?

Я пробовал это на Safari, Chrome и Firefox с одинаковыми результатами.

1 ответ1

0

Современные браузеры используют многопоточность, и поэтому используют несколько потоков для получения и обработки различных элементов / ресурсов со страницы.

Это сделано для того, чтобы ресурсы можно было загружать и обрабатывать параллельно, что ускоряет (возможно / вероятно) в целом.

Так что вместо:

Download -> Process -> Display -> Download -> Process -> Display -> Download -> Process -> Display

чтобы получить и отобразить три изображения, нужно выполнить три Download -> Process -> Display .

Таким образом, один ресурс можно обрабатывать и отображать, не дожидаясь, пока другие закончат работу первым.

Представьте себе 2 крошечных изображения и одно большое. Два крошечных будут отображаться, не дожидаясь завершения большого, поэтому доставка контента будет быстрее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .