Пакетные запросы по HTTP2 - PullRequest
       24

Пакетные запросы по HTTP2

0 голосов
/ 19 февраля 2020

Можно ли получить лучшую пропускную способность от наших серверов, если мы сделаем один большой HTTP-запрос, в отличие от нескольких меньших HTTP-запросов через HTTP2.

Насколько я понимаю, это не должно приводить к каким-либо существенным различиям по производительности, поскольку с HTTP2 мы можем мультиплексировать несколько запросов по одному TCP-соединению.

1 Ответ

1 голос
/ 19 февраля 2020

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

По этой же причине в HTTP / 1.1 было рекомендовано объединение CSS и JavaScript и спрайтинг для изображений, поэтому количество отправляемых данных было одинаковым, но количество запросов было значительно ниже. Фактически из-за способа сжатия, подобного gzip, объем данных часто был меньше при отправке больших запросов.

HTTP / 2 был разработан, чтобы сделать затраты на HTTP-запросы намного меньше, хотя повторное использование одного TCP соединение с использованием мультиплексирования . Теоретически это позволило бы нам отказаться от конкатенации и спрайтов. Однако реальность оказалась несколько менее совершенной - обычно из-за неэффективности браузера, а не из-за ошибки HTTP / 2. Узкое место только что сместилось, и нам нужно оптимизировать браузеры для нового мира. Итак, на данный момент, некоторый уровень концентрации и спрайтов все еще рекомендуется.

Возвращаясь к вашему вопросу, тогда да, он должен иметь отдельные эффекты на этом уровне сети, и на самом деле HTTP / 1.1 и HTTP / 2 могут даже Если вы сделаете это, производительность будет примерно одинаковой.

Однако, помимо сетевого уровня, вы можете обнаружить другие причины, по которым не следует объединять в меньшее количество файлов. Например, если у вас есть один большой файл JavaScript, браузер должен дождаться загрузки всего файла, прежде чем его можно будет проанализировать, скомпилировать и запустить. Возможно, вам лучше стать меньше, важнее JavaScript, загруженный первым. Точно так же со спрайтом изображения вы можете подождать загрузки всего файла спрайта, прежде чем отобразится одно изображение.

Затем возникают последствия кэширования. Изменение одной строки JS или добавление одного изображения к изображению Sprite требует создания целого нового большого файла, что означает, что старый файл не может быть использован, и все это необходимо снова загрузить полностью.

Кроме того, наличие больших файлов может быть более сложным для реализации и управления. Они требуют шага сборки (может быть, не так уж и много, как это делают многие сайты), а создание и управление спрайтами изображений с помощью CSS часто бывает более сложным.

Кроме того, если вы используете это, чтобы придерживаться HTTP / 1.1, то вы могут быть упущены и другие преимущества HTTP / 2, включая сжатие заголовков HPACK и HTTP / 2 pu sh (хотя это также более сложно получить право , чем первоначально предполагалось /hoped!).

Это увлекательная топи c, на которую я потратил много времени на , и лучший совет (как всегда!) состоит в том, чтобы понять технологию и протестировать , тест, тест!

...