2010-07-12 3 views
5

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

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

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

ответ

2

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

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

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

2

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

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

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

0

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

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

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

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

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

4

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

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

Edit:

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

Смежные вопросы