Двоичный протокол
Это на самом деле не очень помогает, кроме разрешения мультиплексирования (что очень помогает с производительностью).Да, программе проще разбирать бинарные пакеты, чем текстовые, но я не думаю, что это может значительно повысить производительность.Как я уже сказал, основная причина перехода на двоичный код заключается в других преимуществах (мультиплексирование и сжатие заголовков) и в облегчении анализа, а не в производительности.
Сжатие заголовка
Это может оказать большое потенциальное влияние.Большинство запросов (и ответов) повторяют много данных.Таким образом, сжимая заголовки (что работает путем замены повторяющихся заголовков ссылками между запросами, а не путем сжатия внутри запросов, как работает сжатие тела HTTP) может значительно уменьшить размер запроса (но в меньшей степени для ответов, где заголовкичасто не является значительной частью общего ответа).
Приоритизация запросов
Это одна из наиболее интересных частей HTTP / 2, которая имеет огромный потенциал, но имеетпока не оптимизирован.Подумайте об этом так: представьте, что вам нужно загрузить 3 критических файла CSS и 3 огромных изображения.В HTTP / 1.1 будут открыты 6 соединений, и все 6 элементов будут загружаться параллельно.Это может показаться хорошим, но это означает, что менее критичные файлы изображений используют полосу пропускания, которая будет лучше потрачена на критические файлы CSS.С HTTP / 2 вы можете сказать «сначала загрузите критически важный CSS с высоким приоритетом, и только когда они будут готовы, посмотрите на эти 3 файла изображений».К сожалению, несмотря на то, что HTTP / 2 имеет модель расстановки приоритетов, которая допускает столь сложную расстановку приоритетов, как вы хотите (слишком сложно, как утверждают некоторые!) * Браузеры и серверы в настоящее время плохо ее используют (и владельцы сайтов, и сетьу разработчиков в настоящее время очень мало способов повлиять на это вообще).На самом деле неправильные решения по расстановке приоритетов могут фактически сделать HTTP / 2 медленнее, чем HTTP / 1.1, поскольку ограничение на 6 соединений снято, и сотни ресурсов могут загружаться параллельно, причем все они работают в одной полосе пропускания.Я подозреваю, что здесь будет намного больше исследований и изменений в реализациях, но не должно быть особых изменений в спецификации, так как она уже позволяет очень сложную расстановку приоритетов, как я упоминал.
Мы былиоптимизировать для HTTP / 1.1 на протяжении десятилетий и многое из этого выжимали.Я подозреваю, что у нас есть намного больше, чтобы выйти из HTTP / 2 (и HTTP / 3, когда он появится).Посмотрите мою будущую книгу , если хотите узнать больше по этой теме.