Сколько ресурсов браузер может одновременно загрузить с одного домена

Обновлено: 21.11.2024

Браузеры ограничивают количество соединений с одним и тем же доменным именем. Это ограничение определено в спецификации (RFC2616). Большинство современных браузеров допускают шесть подключений к одному домену. Большинство старых браузеров допускают только два подключения к одному домену.

Протокол 1.1 гласит, что однопользовательские клиенты не должны поддерживать более двух подключений к любому серверу или прокси-серверу. Это причина ограничений браузера. Для получения дополнительной информации см. RFC 2616 — Протокол передачи гипертекста, раздел 8 — Соединения.

Современные браузеры менее строги, чем это, позволяя большее количество подключений. В RFC не указано, как предотвратить превышение лимита. Открытие соединений может быть заблокировано, либо существующие соединения могут быть закрыты.

Таблица 1. Максимальное количество поддерживаемых подключений
Версия Максимальное количество соединений
Internet Explorer® 7.0 2
Internet Explorer 8.0 и 9.0 6
Internet Explorer 10.0 8
Internet Explorer 11.0 13
Firefox® 6
Chrome™ 6
Safari ® 6
Opera ® 6
iOS ® 6
Android™ 6

Повторное подключение можно использовать для обслуживания большего числа клиентов, чем обычно разрешено. Когда соединения для запросов закрываются, Diffusion Cloud отправляет другой запрос, который сервер принимает. Имейте в виду случаи, когда Diffusion Cloud пытается написать ответ на закрытые опросные соединения до того, как клиент сможет их восстановить. Такое поведение приводит к исключению ввода-вывода, и сервер Diffusion Cloud закрывает клиент, если повторное подключение не включено. Когда клиент пытается восстановить опрос, он прерывается.

Еще один способ обойти ограничения браузера — предоставить несколько субдоменов. Каждому поддомену разрешено максимальное количество подключений. Используя пронумерованные субдомены, клиент может выбрать случайный субдомен для подключения. Если DNS-сервер позволяет разрешать поддомены, соответствующие шаблону, как один и тот же сервер, ограничения на количество вкладок могут быть существенно уменьшены.

Доменное сегментирование – это метод разделения ресурсов между несколькими доменами, который позволяет сократить время загрузки страницы и улучшить видимость в поисковых системах. При использовании нескольких доменов браузеры могут одновременно загружать больше ресурсов, что ускоряет работу пользователей.

Обзор

По умолчанию веб-браузеры ограничивают количество активных подключений для каждого домена. Когда количество загружаемых ресурсов (изображения, CSS, JavaScript и т. д.) превышает этот лимит, пользователи сталкиваются с замедлением загрузки страниц, поскольку загрузки ставятся в очередь.

Чтобы обойти это ограничение, веб-службы разбивают контент на несколько субдоменов. Поскольку браузеры сбрасывают лимит подключений для каждого домена, каждый дополнительный домен допускает дополнительное количество активных подключений.Это позволяет пользователю получать файлы из того же источника с большей пропускной способностью.

Как работает разделение доменов

Когда пользователь подключается к веб-странице, его браузер сканирует полученный HTML-код в поисках ресурсов для загрузки. Обычно эти ресурсы предоставляются одним доменом: доменом, предоставляющим веб-страницу, или доменом, созданным специально для ресурсов. При сегментировании домена браузер пользователя подключается к двум или более разным доменам для одновременной загрузки ресурсов, необходимых для отображения веб-страницы.

Определение количества доменов

Количество сегментов, используемых веб-службой, зависит от количества ресурсов, которые пользователь должен загрузить. Современные веб-браузеры поддерживают в среднем 6 одновременных загрузок на домен. Это число делится на общее количество ресурсов, чтобы получить общее количество запросов. Например, веб-сайт с 30 ресурсами должен выполнить 6 последовательных запросов для одного пользователя. Однако добавление нескольких доменов может привести к снижению производительности. Веб-браузеры должны выполнять поиск DNS в каждом дополнительном домене и поддерживать соединения с каждым доменом, что приводит к замедлению начальной загрузки. Исследование Yahoo! показывает от 2 до 4 доменов как оптимальное соотношение, а дополнительные домены приводят к снижению производительности. Чтобы узнать больше о том, как работает сегментирование домена и как реализовать его с помощью MaxCDN, ознакомьтесь с этим руководством по распараллеливанию загрузок между именами хостов.

Разделение домена и SPDY

Протокол SPDY от Google поддерживает неограниченное количество одновременных запросов, решая те же проблемы, что и сегментирование домена, без дополнительной настройки. Хотя SPDY используется лишь небольшой частью Интернета, его использование распространилось на некоторые из крупнейших веб-сайтов мира, включая Google, Facebook, Twitter и WordPress.

Хотя более широкое распространение SPDY в конечном итоге сделает сегментирование домена устаревшим, старые браузеры по-прежнему будут полагаться на сегментирование домена для повышения производительности.

Пример разделения домена

Поскольку браузеры различают домены по имени, а не по IP-адресу, сегментирование домена может выполняться одним веб-сервером. Если у сервера есть пропускная способность для поддержки нескольких одновременных подключений, он может использовать сегментирование домена для быстрого распространения контента среди посетителей.

Преимущества разделения домена

Разделение домена – проверенный инструмент для повышения производительности и пропускной способности Интернета.

  • Пользователи отмечают повышение производительности, поскольку веб-страницы могут загружать ресурсы одновременно, а не последовательно.
  • Предприятия отмечают повышение удовлетворенности пользователей, поскольку пользователи могут быстрее просматривать веб-страницы и взаимодействовать с ними.
  • Предприятия и пользователи отмечают улучшение использования полосы пропускания, что позволяет быстрее доставлять больше контента большему количеству пользователей.

Заключение

В среднем в одном домене делается 50 запросов на 300 00 самых популярных URL-адресов в Интернете. Это много времени тратится на ожидание загрузки ресурсов, особенно когда некоторые загрузки могут начаться только после завершения других. Разделение доменов может повысить производительность веб-сайта без существенного усложнения.

Сети доставки контента, такие как MaxCDN, предоставляют инструменты, необходимые для быстрого добавления нескольких доменов и ускорения веб-сайта.

Если у вас есть какие-либо вопросы или возникли какие-либо проблемы, обратитесь в службу поддержки, чат и служба поддержки доступны круглосуточно и без выходных.

Обслуживание ресурсов с четырех или пяти разных имен хостов увеличивает распараллеливание загрузки.

Какую оценку получил ваш сайт по этой рекомендации?

Подробнее

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

Время, затраченное на ожидание завершения подключения, называется блокированием, и сокращение этого времени блокировки может привести к более быстрой загрузке страницы. На каскадной диаграмме ниже показана страница, загружающая 45 ресурсов с одного хоста. Обратите внимание, как долго ресурсы заблокированы (коричневые сегменты) перед их загрузкой (фиолетовые сегменты), поскольку они ожидают свободного подключения.

Один из способов улучшить ситуацию — создать несколько поддоменов (например, static1.gtmetrix.com, static2.gtmetrix.com), чтобы увеличить количество параллельно загружаемых ресурсов. Это называется «шардингом домена»." Поскольку браузеры ограничивают количество подключений для каждого хоста, создание поддомена добавляет новый пул подключений, которые может сделать браузер, что позволяет загружать больше ресурсов одновременно. Взяв ту же страницу, что и выше, и разделив запросы ресурсов между двумя доменами вы можете видеть, что на блокировку тратится намного меньше времени, а страница загружается примерно на 33 % быстрее:

Разбиение домена может отрицательно сказаться на производительности: оно добавляет время запроса DNS, а также время подключения к каждому новому параллельному подключению к сегменту (об этом свидетельствуют зеленые сегменты в водопаде); но при правильном использовании может значительно улучшить время загрузки ресурсов. Прежде чем внедрять его, вам следует узнать больше о распространенных проблемах с сегментированием домена.

Наши рекомендации

Вашим первым шагом к сокращению времени блокировки должно быть уменьшение количества ресурсов, необходимых для загрузки (например, сочетание внешних CSS/JS и использование спрайтов). Однако в ситуациях, когда эти оптимизации не помогают (например, в магазине или галерее изображений, где вы не можете использовать спрайты для изображений), сегментирование домена часто может решить проблему.

Если ваш сайт тратит значительное время на блокировку или большинство ваших пользователей используют более старый браузер, например IE6/7, то внедрение сегментирования домена должно привести к значительному повышению производительности. Однако в зависимости от того, как генерируются URL-адреса и откуда загружаются ресурсы, реализация сегментации домена может оказаться сложной и трудоемкой задачей. Если вы уже сократили число ресурсов, загружаемых вашим сайтом, но по-прежнему недовольны производительностью, стоит попробовать сегментирование домена.

Дополнительные ресурсы GTmetrix

Подробнее о сегментировании доменов см. в наших дополнительных ресурсах:

Обзор

PageSpeed ​​рекомендует:

Сбалансировать параллельные ресурсы между именами хостов

Запросы к большинству статических ресурсов, включая изображения, CSS и другие двоичные объекты, можно распараллелить. Максимально сбалансируйте запросы ко всем этим объектам по именам хостов. Если это невозможно, попробуйте убедиться, что ни один хост не обслуживает более чем на 50% больше, чем в среднем по всем хостам. Так, например, если у вас есть 40 ресурсов и 4 хоста, каждый хост в идеале должен обслуживать 10 ресурсов; в худшем случае ни один хост не должен обслуживать более 15 ресурсов. Если у вас 100 ресурсов и 4 хоста, каждый хост должен обслуживать 25 ресурсов; ни один хост не должен обслуживать более 38.

С другой стороны, многие браузеры не загружают файлы JavaScript параллельно*, поэтому нет смысла обслуживать их с нескольких имен хостов. Поэтому при балансировке ресурсов между именами хостов удалите все файлы JS из уравнения распределения.

*Список браузеров, которые поддерживают и не поддерживают параллельную загрузку файлов JavaScript, см. в разделе Browserscope.

Предотвратить блокировку параллельных загрузок внешним JS

При загрузке внешнего JavaScript многие браузеры блокируют загрузку всех других типов файлов на все имена хостов, независимо от количества задействованных имен хостов. Чтобы загрузки JS не блокировали другие загрузки (и чтобы ускорить сами загрузки JS):

    на которые ссылается один HTML-документ. чтобы они скачивались после других ресурсов.
Всегда обслуживайте ресурс с одного и того же имени хоста.

Чтобы увеличить количество попаданий в кэш браузера, клиент всегда должен получать ресурсы с одного и того же имени хоста. Убедитесь, что все ссылки страниц на один и тот же ресурс используют один и тот же URL-адрес.

Рекомендуемые ссылки

О GTmetrix

Компания Carbon60 разработала GTmetrix как инструмент, с помощью которого клиенты могут легко проверять производительность своих веб-страниц. Узнать больше.

При анализе производительности вашего сайта важно понимать, как каждый браузер загружает файлы с вашего сервера. Хотя многие этого не осознают, на самом деле существует ограничение на количество параллельных подключений, которые браузер может установить к одному и тому же хосту. Таким образом, в зависимости от того, какой браузер используется, ограничение на количество подключений на хост будет варьироваться от 2 до 13, с максимальным количеством подключений до 60. Количество подключений, доступных в браузере, напрямую отвечает за то, что обычно называется блокировкой или зависанием.

Что блокирует?

Блокировка происходит, когда файл вынужден ждать соединений для освобождения, прежде чем он сможет начать загрузку в браузер. Файлы обычно выстраиваются в очередь и ждут, пока соединение с сервером освободится, прежде чем они станут доступными для пользователей сайта.

Что вызывает блокировку?

Когда требуется загрузить больше файлов, чем доступно подключений, блокировка неизбежна. Как только HTML-код вашей страницы загрузится, все файлы CSS, JavaScript, изображения и другие файлы начнут загружаться с сервера, чтобы эти элементы можно было отобразить в вашем браузере. Если не указано иное, эти файлы будут загружаться синхронно — в том порядке, в котором они появляются в коде вашего сайта. Когда браузер достигает предела доступных подключений, дополнительные файлы, запрошенные для загрузки, вынуждены ждать, пока не станет доступным другое подключение.

В качестве примера возьмем Google Chrome. Chrome имеет ограничение в 6 подключений на одно имя хоста и максимум 10 подключений. По сути, это означает, что он может одновременно обрабатывать 6 запросов, поступающих с одного и того же хоста, и одновременно обрабатывать еще 4 запроса, поступающих с другого хоста. Это важно, когда вы понимаете, сколько запросов отправляется с разных хостов на одну и ту же страницу. В то время как Chrome может обрабатывать только 10 запросов одновременно, Firefox может обрабатывать до 17. Чтобы получить актуальный список сетевых спецификаций для браузеров или проверить свой собственный браузер, посетите страницу Browser Scope.

Представьте, что у вас есть 12 файлов (CSS, JS, изображения и т. д.), синхронно загружаемых на ваш сайт, и все они поступают с одного хоста. В Chrome первые 6 начнут загружаться, а следующие 6 будут вынуждены ждать. Эти оставшиеся 6 файлов затем начнут загружаться по мере того, как станут доступны соединения. Если все 6 файлов завершат загрузку одновременно, все соединения освободятся, и сразу же начнется загрузка продолжающихся файлов. Однако это почти всегда не так. Обычно одновременно освобождается только одно соединение. Несмотря на постоянные улучшения производительности, браузеры могут обрабатывать только определенное количество запросов одновременно. Возможно, вы заметили, что открытие дополнительных вкладок снижает общее время отклика страницы. Это связано с тем, что те же ограничения на подключение все еще существуют, независимо от того, сколько вкладок открыто. Блокировка может произойти даже с базовым HTML-кодом вашего сайта. Это делает блокировку злодеем, который обычно остается незамеченным для большинства веб-команд.

Что вы можете сделать с блокировкой?

Хотя может показаться, что наличие большего количества доступных подключений значительно повысит производительность браузера (и Интернета), это может вызвать большую нагрузку на сервер. Если бы ваш браузер мог обрабатывать 60 подключений вместо 6, сервер потенциально мог бы обрабатывать всего 10% трафика. Есть некоторые браузеры, которые позволяют вам увеличить количество доступных подключений (Opera, IE10, 11 и 12), но, как правило, не рекомендуется увеличивать количество подключений, если вы не выполняете нагрузочный тест на своем сервере. Мало того, что увеличение количества подключений отрицательно скажется на производительности вашего сервера, сервер потенциально может воспринять вас как DDoS-атаку.

Чтобы блокировка не влияла на производительность вашего веб-сайта, важно соблюдать баланс между интерфейсом и сервером, чтобы оптимизировать работу в Интернете. Вы также можете рассмотреть возможность загрузки файлов асинхронно или через вызовы Ajax. Вы даже можете выбрать порядок загрузки файлов. Поэтому, если определенное изображение представляет для страницы большую ценность, чем ваши отзывы клиентов, рассмотрите возможность его загрузки в первую очередь.

Хотя вы не можете остановить блокировку, надеюсь, вы узнали несколько способов справиться с ней. Чтобы узнать больше о передовых методах веб-производительности, ознакомьтесь с нашей серией акселераторов.

Читайте также: