Разумное количество одновременных, асинхронных запросов ajax

Я задаюсь вопросом, что идет согласие, сколько запрашивает одновременный асинхронный ajax, обычно допустимо.

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

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

6
задан BЈовић 23 December 2011 в 13:39
поделиться

5 ответов

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

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

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

3
ответ дан 10 December 2019 в 02:42
поделиться

Трудно ответить, не зная некоторых деталей. Если вы просто запускаете запросы и забываете о них, то 4 запроса могут подойти, как и 20, если пользовательский интерфейс не пострадает из-за низкой производительности. Но если вам нужно собрать информацию обратно из службы, то координация этих ответов может стать сложной задачей. Это может быть что-то для рассмотрения.

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

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

2
ответ дан 10 December 2019 в 02:42
поделиться

Я почти уверен, что браузер в любом случае ограничивает количество подключений.

Если у вас Firefox, введите about: config и найдите network.http.max-connections-per-server , и там будет указан ваш максимум. Я почти уверен, что это также будет предел для соединений AJAX. Я думаю, что IE ограничен 2. Я не уверен насчет Chrome или Opera.

Изменить:

В Firefox 23 предпочтение с именем network.http.max-connections-per-server не существует, но есть network.http.max- постоянных подключений на сервер , а значение по умолчанию - 6.

4
ответ дан 10 December 2019 в 02:42
поделиться

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

Если я помню, IE является единственным браузером, который по-прежнему ограничивает соединения до 2. Это приводит к тому, что ваши запросы ставятся в очередь, и если ваши первые 2 запроса занимают больше времени, чем ожидалось, или тайм-аут, два других запроса автоматически завершатся ошибкой. В некоторых случаях вы также получаете раздражающий диалог «разрешить продолжить сценарий» в IE.

Если ваш пользователь не может ничего сделать, пока все 4 запроса не вернутся (особенно с учетом увяддной производительности JavaScript в IE), я бы создал транспортный объект, содержащий данные для всех запросов, а затем возвращаемый транспортный объект, который можно анализировать и делегировать при возврате.

0
ответ дан 10 December 2019 в 02:42
поделиться

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

var request = []//a queue of the requests to be sent to the server

request[request.length] = //whatever you want to send to the server
startSend();

function startSend(){//if nothing is in the queue go ahead and send this one
  if(request.length===1){
    send();
  }
}

function send(){//the ajax call to the server using the first request in queue
  var sendData = request[0];
  //code to send the data
  //then when you get the response (I can't remember exactly the code for it)
  //send it to a function to process the data
}

function process(data){
  request.splice(0,1);
  if(request.length>0){//check to see if you need to do another ajax call
    send();
  }
  //process data
}

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

0
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: