Есть ли существенные преимущества в производительности с мультиплексированием HTTP2 по сравнению с HTTP2 Server Push?
HTTP2-мультиплексирование использует одно и то же TCP-соединение, тем самым устраняя время соединения с одним и тем же хостом.
Но с HTTP2 Server Push есть какие-то существенные преимущества в производительности, за исключением времени, которое мультиплексирование HTTP2 займет при запросе каждого ресурса.
2 ответа
Я сделал презентацию об этом, которую вы можете найти здесь.
В частности, демонстрация (начиная с 36:37) показывает преимущества, которые вы можете получить, используя только мультиплексирование, а затем добавление HTTP/2 Push.
Спойлер: комбинация HTTP / 2 мультиплексирования и Push дает удивительно лучшие результаты в отношении HTTP/1.1.
Опять же, каждый случай отличается, поэтому вы должны измерить ваш случай. Но потенциал HTTP / 2, обеспечивающий лучшую производительность, чем HTTP / 1.1, действительно велик, и многие (большинство?) Случаи выиграют от этого.
Я не уверен, что именно вы спрашиваете здесь, или если это хорошо подходит для Stackru, но постараюсь ответить тем не менее. Если это не тот ответ, который вы ищете, пожалуйста, перефразируйте вопрос, чтобы мы могли понять, что именно вы ищете.
Вы правы в том, что HTTP/2 использует мультиплексирование, что сводит на нет необходимость в нескольких соединениях (а также время и ресурсы, необходимые для их настройки и управления ими). Однако это намного больше, чем это, поскольку оно не ограничено (браузеры обычно ограничивают соединения 4-6 для каждого хоста), а также позволяет "одинаковым" соединениям (тот же IP и тот же сертификат, но другое имя хоста) также совместно использовать соединения. В основном это решает организацию очереди ресурсов, которую означает метод запрос / ответ HTTP/1, и уменьшает потребность в ограниченных множественных соединениях, которые HTTP/1 требует в качестве обходного пути. Что также уменьшает потребность в других обходных путях, таких как шардинг, файлы спрайтов, конкатенация и т. Д.
И да, HTTP/2-серверный push сохраняет в одну поездку. Поэтому, когда вы запрашиваете веб-страницу, она отправляет как HTML, так и CSS, необходимые для рисования страницы, поскольку сервер знает, что вам понадобится CSS, поскольку бессмысленно просто отправлять вам HTML, ожидая, пока ваш веб-браузер получит его, проанализирует его, см. ему нужен CSS, запросите файл CSS и дождитесь его загрузки.
Я не уверен, если вы намекаете на то, что время прохождения сигнала в оба конца настолько мало, что при использовании push-запросов к серверу HTTP/2 мало что происходит, потому что теперь нет задержки при запросе файла из-за мультиплексирования HTTP/2? Если это так, то это не так - необходимо добиться значительных успехов в продвижении ресурсов, в частности, в блокировании таких ресурсов, как CSS, которые браузер будет ждать, прежде чем нарисовать одну вещь на экране. Хотя мультиплексирование уменьшает задержку при отправке запроса, оно не уменьшает задержку при отправке запроса на сервер, теперь на сервере, который отвечает на это и отправляет его обратно. Хотя они звучат мало, они заметны и заставляют сайт чувствовать себя медленно.
Так что да, в настоящее время основной выигрыш для HTTP/2 Server Push заключается в сокращении времени прохождения туда-обратно (в основном, до нуля для ключевых ресурсов).
Однако мы находимся в зачаточном состоянии, и есть потенциальные другие варианты использования для производительности или по другим причинам. Например, вы можете использовать это как способ расстановки приоритетов контента, чтобы важное изображение можно было выдвинуть раньше, когда без этого браузер, скорее всего, сначала запросит CSS и Javascript и оставит изображения на потом. Server Push также может отменить необходимость встроенного CSS (который увеличивает размер страниц с копиями таблиц стилей и может потребовать Javascript для последующей загрузки правильного файла CSS) - еще один обходной путь HTTP/1.1 для повышения производительности. Я думаю, что будет очень интересно посмотреть, что произойдет с HTTP/2 Server Push в ближайшие годы.
Сказав это, с HTTP/2-сервером все еще существуют серьезные проблемы. Самое главное, как вы предотвращаете потерю пропускной способности, выдвигая ресурсы, которые браузер уже кэшировал? Вероятно, для этого будет добавлен дайджест-заголовок HTTP, но он все еще обсуждается. Что приводит к тому, как реализовать HTTP/2 Server Push наилучшим способом - для веб-браузеров, веб-серверов и веб-разработчиков? Спецификация HTTP/2 немного расплывчата в том, как это должно быть реализовано, что оставляет его на усмотрение разных веб-серверов, в частности, предоставляя разные методы для подачи сигнала серверу на передачу ресурса.
Как я уже сказал, я думаю, что это одна из частей HTTP/2, которая может привести к некоторым очень интересным приложениям. Мы живем в интересные времена...