Увеличьте количество одновременных HTTP-вызовов

Я прошел много сообщений для этого на SO, но не нашел подходящего решения

Я получил его из одного из ответов для максимального одновременного подключения к одному доменному пределу

IE 6 and 7:      2
IE 8:            6
IE 9:            6
IE 10:           8
IE 11:           8
Firefox 2:       2
Firefox 3:       6
Firefox 4 to 46: 6
Opera 9.63:      4
Opera 10:        8
Opera 11 and 12: 6
Chrome 1 and 2:  6
Chrome 3:        4
Chrome 4 to 23:  6
Safari 3 and 4:  4

Как вызывать больше, чем максимальные HTTP-вызовы, установленные браузерами в один домен.

Я прошел через это

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

IE6, IE7 - предел в два. IE8 - 6, если ваш широкополосный доступ, 2, если вы набираются.

но у меня нет такого сценария. Я получаю конкретные данные, указывающие на один веб-сервер. как я это преодолею.

У меня есть 14 http-звонков на тот же сервер при запуске, что является причиной того, что загрузка фактической страницы занимает много времени. Как повысить производительность моего сайта с помощью одновременных вызовов ajax/http

Ответ 1

14 запросов не проблема. Это становится проблемой, только если время отклика сервера велико. Так что, скорее всего, коренная проблема связана с производительностью на стороне сервера

Возможны следующие решения:

  • использовать HTTP-кеш (сервер должен отправлять соответствующие заголовки)
  • используйте кеш в середине (например, CDN, Varnish)
  • оптимизировать серверную часть
    • содержание связано:
      • объединить несколько запросов в один
      • удалить дублированную информацию в запросах
      • не загружать информацию, которую клиент не отображает
    • использовать кеш на стороне сервера
    • и т.д.... любой другой подход... их много.

Ответ 2

что вы можете сделать, это отправить эту нагрузку во многие поддомены. Вместо использования только www вы используете www1, www2, www3, www4 и round robin между этими клиентами.

Вам нужно настроить веб-сервер так, чтобы субдомены www * оказались в одном и том же месте.

Ответ 3

Просто ответьте на вопрос Чарли Козы, поскольку это имеет некоторые ограничения в зависимости от количества пользователей и т.д.

Первое, на что вы должны обратить внимание, это использовать CDN, я предполагаю, что вы уже сделали это.

Тот факт, что вы подключаетесь только к одному серверу, не проблема, браузер будет разрешать одновременные подключения на основе DNS-хоста, а не только IP.

Если у вас есть доступ к управлению DNS и вы можете динамически создавать новый поддомен, обратите внимание на бесплатные сервисы, такие как CloudFlare API.

Либо создайте подстановочный домен, который позволит любому поддомену указывать на 1 сервер.

Таким образом, на стороне вашего сервера вы можете определить, если у пользователя уже есть количество активных соединений X, если это так, можно выполнить следующий сценарий:

  • Динамически создать новый поддомен на том же IP-адресе или, если используется подстановочный знак, создать случайный поддомен newDomainRandom.domain.com
  • Затем верните пользователь 301 перенаправить на новый домен, пользователи интернет-клиента будут затем зарегистрируйте это как новое соединение с другим доменом.

Здесь много псевдо-работы, но это скорее проблема сети, чем проблема кодирования.

Обязательное предупреждение об этом методе:

Нет ограничений в использовании 301 редиректов на сайте. Ты можешь реализовать более 100 тысяч 301 переадресаций без каких-либо штрафов. Но: Слишком много перенаправлений 301 создают ненужную нагрузку на сервер и снизить скорость.

Ответ 4

  Как позвонить больше, чем максимальное количество вызовов HTTP, установленное браузерами на один домен.

Это ограничение HTTP/1.1 (6-8). Если вы можете сменить сервер (вы пометили этот вопрос как http), лучшим решением будет использование HTTP/2 (RFC 7540).) вместо HTTP/1.1.

HTTP/2 мультиплексирует множество HTTP-запросов по одному соединению, см. эту схему. Когда HTTP/1.1 имеет предел примерно 6-8, HTTP/2 не имеет стандартного ограничения, но говорит, что "Рекомендуется, чтобы это значение (SETTINGS_MAX_CONCURRENT_STREAMS) было не меньше 100" (RFC 7540). Это число лучше, чем 6-8.

Ответ 5

  У меня есть приложение, управляемое данными.... у меня есть карта, сводка, диаграммы и сетки Google

В комментариях вы упомянули, что данные поступают от разных провайдеров, в случае если они находятся на разных доменах - попробуйте использовать dns-prefetch, например, так:

   <link rel="dns-prefetch" href="http://www.your-data-domain-1.com/">
   <link rel="dns-prefetch" href="http://www.your-data-domain-2.com/">
   <link rel="dns-prefetch" href="http://www.3rd-party-service-1.com/">
   <link rel="dns-prefetch" href="http://www.3rd-party-service-2.com/">

Вам необходимо перечислить все домены, которые вы вызываете через AJAX и которые не являются фактическими доменами вашего веб-сайта.

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

Смотрите также:

Ответ 6

Просто используйте Http2. Http1 имеет ограничение на количество одновременных подключений, в зависимости от браузера около 6-10.

Ответ 7

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

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

Для достижения вышесказанного вам понадобится нехватка протокола /API, работающего поверх http-соединения, или соединения, которое было обновлено до websocket. Ниже приведены некоторые альтернативы, которые предоставляют функцию асинхронного ответного сообщения :