Я оптимизировал время загрузки страницы сайта. Одним из способов было объединение нескольких HTTP-запросов для CSS в один комбинированный HTTP-запрос. Но один из рецензентов задал интересный вопрос: не приведет ли параллелизация загрузки нескольких CSS-файлов к сокращению времени загрузки страницы?
Я никогда не рассматривал этот вариант, так как единственное, что я читал в Интернете, - это то, что сокращение количества (блокирующих) HTTP-запросов является ключом к более быстрой веб-странице (хотя Google Pagespeed Insights, кажется, не четко заявляет об этом 1 ).
Я вижу несколько причин, по которым распараллеливание не приведет к повышению производительности или будет иметь незначительное значение (перевесит преимущество использования меньшего количества HTTP-запросов):
- Установка нового соединения стоит дорого. Хотя настройка нескольких соединений может выполняться параллельно, браузеры будут использовать не более 4-6 соединений (в зависимости от браузера), поэтому параллельная загрузка CSS блокирует загрузку других ресурсов, таких как JavaScript и изображения.
- Настройка HTTPS-соединения требует дополнительных данных. Я прочитал это легко может быть несколько килобайт данных. Это некоторые дополнительные данные, которые нужно отправлять по проводам, а не CSS, который мы на самом деле хотим отправить.
- Благодаря алгоритму медленного запуска TCP, чем больше данных было отправлено по соединению, тем быстрее будет соединение. Таким образом, более продолжительные соединения будут отправлять данные гораздо быстрее, чем новые. Посмотрите, например, протокол SPDY, который использует одно соединение для улучшения времени загрузки страницы.
- TCP является абстракцией: все еще (обычно) только одно базовое соединение. Таким образом, хотя используется несколько запросов, данные, передаваемые по проводной сети, могут вовсе не обязательно использовать несколько соединений для повышения скорости.
- Интернет-соединения по своей сути ненадежны, особенно на мобильных устройствах. Один запрос может быть выполнен значительно быстрее, чем другой. Использование нескольких запросов для CSS означает, что отображение веб-страницы блокируется до тех пор, пока не завершится последний запрос, что может быть значительно позже, чем среднее соединение.
Итак, есть ли какая-то польза от распараллеливания HTTP-запросов для CSS-файлов?
Примечание / обновление: все CSS-файлы блокируют рендеринг. CSS-файлы, которые еще не были перемещены за пределы критического пути.