Ответ
Да, браузер ограничивает количество одновременных HTTP-запросов к одному домену.
Ограничения:
- Chrome/Firefox/Safari: 6-8 параллельных соединений на один домен.
- Общее количество соединений (всех доменов): ~30 (зависит от браузера).
Как обойти:
- Разделение доменов (Domain Sharding) – запросы к поддоменам (
static1.example.com,static2.example.com). - HTTP/2 – мультиплексирование запросов в одном соединении.
- Объединение ресурсов (CSS/JS-бандлы, спрайты).
Пример:
// Запросы к разным поддоменам
fetch('https://cdn1.example.com/data.json');
fetch('https://cdn2.example.com/data.json');
При превышении лимита запросы ставятся в очередь. HTTP/2 решает проблему, но требует поддержки сервера.
Ответ 18+ 🔞
Ага, вот эта классика, про которую все забывают, пока их собственный сайт не начинает грузиться как пьяный ёжик в сиропе! Слушай сюда, сейчас разжую.
Браузер — он, конечно, не дурак, но и не шибко щедрый. Он смотрит на твои запросы к одному и тому же сайту и думает: «Ну-ну, спокойно, товарищ, не надо так рваться». И ставит жёсткий лимит: больше 6-8 одновременных подключений к одному домену он просто не пропустит. Остальные будут сидеть в очереди, как последние лохи, и ждать своей участи. А общее число соединений ко всем сайтам сразу — где-то около 30, но это уже как карта ляжет.
И что же делать, если тебе нужно загрузить овердохуища мелких картинок, скриптов и стилей? Сидеть и плакать? Не, есть несколько проверенных способов эту систему обмануть, как ловкачи на базаре.
Во-первых, старый добрый трюк с доменами. Это как если бы к одной кассе выстроилась очередь в полкилометра. Что делает умный директор? Открывает вторую, третью кассу! Ты создаёшь несколько поддоменов — static1.tvoysayt.com, static2.tvoysayt.com — и раскидываешь ресурсы по ним. Для браузера это уже как бы «разные магазины», и к каждому он применяет свой лимит в 6 соединений. Хитро, блядь!
Во-вторых, священный грааль — HTTP/2. Это уже не очередь в разные кассы, а волшебная труба, в которую ты засовываешь все запросы сразу, а они на другой стороне вылезают аккуратненько и в правильном порядке. Одна соединение — и хоть сотню запросов гоняй. Но тут есть нюанс, ёпта: сервер должен эту магию поддерживать. Если нет, то возвращаемся к кассам и очередям.
Ну и третий способ — не насиловать систему, а быть умнее. Зачем делать 100 запросов на 100 мелких файлов? Слепи из них один здоровенный бандл для скриптов, один — для стилей, а картинки собери в один спрайт, как те самые советские колбаски в банке. Один запрос — и делов-то!
Смотри, как это выглядит в коде, если пошли по пути разделения доменов:
// Вместо того чтобы все валить на один домен и упереться в потолок...
fetch('https://tvoysayt.com/api/data1.json');
fetch('https://tvoysayt.com/api/data2.json');
fetch('https://tvoysayt.com/api/data3.json');
// ...после шестого всё встанет колом.
// Делаем так: разъезжаем по разным "подъездам" одного дома.
fetch('https://cdn1.tvoysayt.com/api/data1.json');
fetch('https://cdn2.tvoysayt.com/api/data2.json');
fetch('https://cdn3.tvoysayt.com/api/data3.json');
// И каждый такой подъезд (домен) даст тебе ещё по 6 слотов. Вот и простор!
Короче, мораль всей этой басни: браузер — строгий, но справедливый менеджер. Хочешь скорость — либо играй по его правилам (объединяй ресурсы), либо найди лазейку (шуруй на поддомены), либо переходи на современные технологии (HTTP/2). А тупо плодить запросы — это самый верный способ заставить пользователей материться и уходить к конкурентам. Думай головой, а не тем местом, которым обычно сидишь!