Как распараллелить загрузки между именами хостов

Некоторые инструменты тестирования скорости полосы пропускания могут рекомендовать сайтам распараллеливать загрузку по именам хостов, чтобы эффективно предоставлять веб-контент веб-браузерам. Эта рекомендация обычно встречается на сайтах, использующих протокол HTTP / 1.1, и происходит, когда веб-браузеры ограничивают количество одновременных подключений к домену. Веб-сайты с большим количеством HTTP-запросов на статическое содержимое, например изображения, CSS-файлы и JavaScript, сталкиваются с предупреждением «Параллельное скачивание через имена хостов». Чтобы обойти это ограничение, настройте разделение домена или используйте сеть доставки контента (CDN).

Зачем распараллеливать загрузки между именами хостов?

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

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

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

Что такое предупреждение о параллельной загрузке между именами хостов?

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

Для веб-сайтов, использующих протокол HTTP / 1.1, способ обойти эту потребность в более открытых соединениях состоит в том, чтобы минимизировать HTTP-запросы, настроить CDN или реализовать разбиение домена.

Для веб-сайтов, использующих протокол HTTP / 2, несколько ресурсов могут загружаться параллельно через одно соединение; это называется мультиплексированием. Мультиплексирование делает ненужным разбиение домена с помощью HTTP / 2. Около 77% веб-браузеров поддерживают HTTP / 2 и не должны сталкиваться с проблемами при распараллеливании загрузок.

Если ваш веб-хостинг-провайдер поддерживает HTTP / 2, можно игнорировать предупреждение о распараллеливании загрузок по именам хостов. С HTTP / 2 несколько ресурсов могут загружаться параллельно по одному соединению.

Что такое разделение домена?

Шардинг домена — это метод оптимизации производительности для соединений HTTP / 1.1, который используется на веб-сайтах с большим объемом HTTP-запросов. При разделении доменов ресурсы веб-контента распределяются между несколькими поддоменами. Когда активы распределяются таким образом, количество одновременных запросов, которые могут быть обработаны, увеличивается.

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

В Drupal модули добавляют файлы CSS и JavaScript, которые могут снизить производительность. Перейти к Конфиг сайта > Представление и оптимизировать CSS и JavaScript.

Чтобы воспользоваться преимуществами шардинга домена в соединениях HTTP / 1.1, следуйте этим советам:

  • Служите ресурсам из тех же поддоменов, чтобы эффективно кэшировать файлы.
  • Распределите ресурсы равномерно между поддоменами.
  • Купить SSL сертификаты для поддоменов.

В соединениях HTTP / 2 разделение доменов снижает производительность, поскольку существуют дополнительные запросы DNS. Эти DNS-запросы увеличивают время разрешения и не кэшируют файлы. Разделение домена также добавляет время каждому новому соединению. Это другие недостатки шардинга домена в соединениях HTTP / 2:

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

Как распараллелить загрузки между именами хостов

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

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

Для веб-сайтов, использующих HTTP / 2 и HTTP / 1.1, самый простой способ распараллелить загрузку по именам хостов — это использовать несколько поддоменов через CDN. Для сайтов, использующих HTTP / 1.1 и WordPress, настройте субдомены и отредактируйте файл WordPress functions.php.

Настройка поддоменов

Чтобы распределить ресурсы по поддомену, создайте как минимум один и до четырех поддоменов; один или два поддоменов рекомендуется. Наиболее распространенный способ создания поддоменов — использование cPanel, предлагаемого большинством веб-хостингов.

Примеры поддоменов:

  • media1.mydomain.com
  • media2.mydomain.com
  • media3.mydomain.com
  • media4.mydomain.com

Кроме того, субдомены и имена хостов должны иметь одинаковую структуру и путь. Например, если путь к изображению на хосте — www.mydomain.com/wp-content/uploads/, путь к изображению на поддоменах должен совпадать, например, media1.mydomain.com/wp-content/uploads/.

Настройте CDN для распараллеливания загрузок

После настройки CDN и создания поддоменов укажите каждый поддомен в папке, содержащей статический контент. Таким образом, контент загружается через поддомен вместо основного домена.

Чтобы указать субдомен, используйте редактор зон DNS в cPanel, чтобы создать новую запись CNAME для каждого субдомена. В поле Имя записи введите поддомен, например, media.mydomain.com. В поле CNAME введите основной домен, например, www.mydomain.com.

После того, как записи CNAME будут созданы и распространены вашим веб-хостом, добавьте записи CNAME в настройки зоны CDN.

Отредактируйте файл конфигурации сайта в WordPress для распараллеливания загрузок

После настройки поддоменов добавьте этот код в файл functions.php темы WordPress, используемой для вашего сайта. Замените media1.mydomain.com и media2.mydomain.com фактическими поддоменами.

function parallelize_hostnames ($ url, $ id) {
$ hostname = par_get_hostname ($ url); // вызов дополнительной функции
$ url = str_replace (parse_url (get_bloginfo ('url'), PHP_URL_HOST), $ hostname, $ url);
вернуть $ url;
}
function par_get_hostname ($ name) {
$ subdomains = array ('media1.mydomain.com', 'media2.mydomain.com'); // добавляем здесь свои субдомены, сколько хотите.
$ host = abs (crc32 (basename ($ name))% count ($ поддоменов));
$ hostname = $ subdomains [$ host];
вернуть $ hostname;
}
add_filter ('wp_get_attachment_url', 'parallelize_hostnames', 10, 2);

Если вы используете Jetpack с WordPress, включите службу Site Accelerator, чтобы поместить ваши изображения в CDN, управляемый WordPress.

Ссылка на основную публикацию