Объединяет ли SPDY/HTTP2 ответы?

У меня есть вопрос о SPDY/HTTP2: обычно вы объединяете несколько файлов CSS и JS в один файл, чтобы сохранить запросы и повысить производительность. Я слышал, что SPDY/HTTP2 объединяет несколько запросов в один ответ. Означает ли это, что мне больше не нужно предварительно объединять файлы CSS и JS, потому что это обрабатывается протоколом?

Другими словами: могу ли я использовать <script source="moduleA.js"></script> и <script source="moduleB.js"></script> с SPDY/HTTP2 так же, как я использовал бы <script source="allScripts.js"></script> с HTTP1? Это то же самое с точки зрения производительности ответа, но с преимуществом кэширования каждого файла по отдельности, чтобы я мог изменить moduleB.js и сохранить moduleA.js в кэше?


person Pipo    schedule 07.10.2013    source источник


Ответы (3)


HTTP/2.0 (насколько мне известно) еще не существует — это все еще предлагаемый стандарт. Но вполне вероятно, что он будет использовать ту же обработку соединения, что и SPDY.

SPDY не объединяет их, а мультиплексирует запросы по одному и тому же соединению - с точки зрения сети эффект тот же.

Да, вам не нужно объединять файлы контента вручную, да они будут кэшироваться независимо.

person symcbean    schedule 07.10.2013
comment
Есть ли для этого какой-либо анализ реального мира, который выходит за рамки hello world? - person Marc; 25.05.2014

SPDY3 и HTTP2 мультиплексируют запросы по одному и тому же физическому соединению. Но даже мультиплексированные запросы могут отправляться последовательно для каждого ресурса, что приводит к значительному замедлению из-за ожидания времени приема-передачи.

Как в SPDY3, так и в HTTP2 есть функция под названием «Resource Push» (также известная как «SPDY Push», не путать с «Server Push»), которая позволяет передавать связанные ресурсы без запроса клиента, а Проект Jetty — я коммиттер — единственный, насколько мне известно, реализует эту функцию.

В этом видео вы можете увидеть Resource Push в действии: http://webtide.intalio.com/2012/10/spdy-push-demo-from-javaone-2012/.

С помощью Resource Push вы экономите на дополнительных обращениях, чтобы получить все различные файлы JS и по-прежнему пользоваться кешем браузера для каждого отдельного файла. Весь смысл конкатенации ресурсов как раз и состоит в том, чтобы уменьшить количество циклов, необходимых для получения всех необходимых ресурсов, и Resource Push помогает решить эту проблему.

person sbordet    schedule 07.10.2013

HTTP/2.0 допускает мультиплексирование, при котором несколько потоков запросов/ответов обмениваются данными по одному и тому же TCP-соединению.

Поскольку создание и запуск TCP-соединений требует больших затрат, мультиплексирование HTTP/2.0 будет обычно быстрее, чем полупараллельная загрузка HTTP/1.1, где ограниченное количество TCP-соединений (повторно) используется браузер для выполнения заданного количества запросов ресурсов.

Но ваш пробег может отличаться. Измерьте это.

В качестве примечания: вы можете ссылаться на все свои библиотеки отдельно при разработке и отладке, но объединять и минимизировать JS/CSS в один файл при развертывании.

person CodeCaster    schedule 07.10.2013
comment
Извините, но это очень запутанно и неправильно в нескольких местах. creating and starting TCP connections is expensive — да, но поддержка активности и конвейерная обработка существуют уже давно — браузеры повторно используют соединения как минимум последние 12 лет. SPDY не меняет этого поведения — он избавляет от необходимости упорядоченной доставки запросов по одному каналу. SPDY может довольно легко использовать несколько каналов - с той же оговоркой о подрыве медленного запуска TCP. - person symcbean; 07.10.2013
comment
@symcbean Я не собирался писать полное сравнение между HTTP/1.1 и 2.0. ОП спрашивает: будет ли иметь какое-либо значение между объединением файлов через HTTP/1.1 и отсутствием объединения файлов через HTTP/2.0, на что я ответил, объяснив разницу, которую мультиплексирование может привести к объясненной ситуации. Пожалуйста, укажите, где я ошибаюсь. - person CodeCaster; 07.10.2013