Un nombre raisonnable de demandes ajax simultanées et asynchrones

Je me demande quel est le consensus sur le nombre de demandes ajax asynchrones simultanées généralement acceptables.

La raison pour laquelle je demande, c'est que je travaille sur une application Web personnelle. Pour la plupart, je tiens mes demandes à un. Cependant, il y a quelques situations où j'envoie jusqu'à 4 requêtes simultanément. Cela provoque un peu de retard, car le navigateur ne prend en charge que 2 à la fois.

Le délai n'est pas un problème en termes de convivialité, pour l'instant. Et il faudra attendre un peu avant de me soucier de l'évolutivité, si jamais. Mais j'essaie de respecter les meilleures pratiques, autant que cela est raisonnable. Quelles sont vos pensées? Est-ce que 4 demandes sont un nombre raisonnable?

Cela dépend vraiment si cela fonctionne correctement. Si la logique de l'application est construite, 4 demandes simultanées ont un sens, faites-le comme ça. Si la logique n'est pas perturbée en emballant plusieurs requêtes en une seule demande, vous pouvez le faire, mais seulement si cela ne rend pas le code plus compliqué. Gardez-le aussi simple et simple qu'en cas de problème, vous pouvez commencer à optimiser.

Mais vous pouvez vous demander si la conception de l'application peut être améliorée qu'il n'y a pas besoin de demandes multiples.

Vérifiez également sur une connexion vraiment lente. Les requêtes http simultanées ne sont pas nécessairement exécutées sur le serveur dans l'ordre approprié et elles peuvent également revenir dans un ordre différent. Cela pourrait donner des problèmes que vous rencontrerez uniquement sur des lignes plus lentes.

Je suis tout à fait sûr que le navigateur limite le nombre de connexions que vous pouvez avoir de toute façon.

Si vous avez Firefox, tapez about:config et cherchez network.http.max-connections-per-server et cela vous indiquera votre maximum. Je suis presque convaincu que ce sera également la limite pour les connexions AJAX. Je pense que IE est limité à 2. Je ne suis pas sûr de Chrome ou Opera.

Modifier:

Dans Firefox 23, la préférence avec le nom network.http.max-connections-per-server n'existe pas, mais il existe un network.http.max-persistent-connections-per-server et la valeur par défaut est 6.

Il est difficile de répondre sans connaître certains détails. Si vous lancez simplement les requêtes et que vous les oubliez, alors 4 demandes pourraient être bien, comme 20, aussi longtemps que l'expérience de l'utilisateur ne serait pas lésée par une performance lente. Mais si vous devez collecter des informations du service, la coordination de ces réponses pourrait être délicate. Cela peut être quelque chose à considérer.

La réponse précédente de Christian a un bon point: vérifiez-la sur une connexion lente. Fiddler peut l'aider car il vous permet de tester les connexions lentes en simulant différentes vitesses de connexion (56K et plus).

Vous pourriez également envisager de déclencher une requête asynchrone unique qui pourrait contenir un ou plusieurs messages à un service de contrôle, ce qui pourrait remettre les messages aux services appropriés, collecter les résultats puis retourner au client. Le fait d'avoir plusieurs requêtes asynchrones étant déclenchées puis de revenir à des moments différents pourrait présenter une expérience perturbée pour l'utilisateur car chaque réponse est alors rendue sur la page à des moments différents.

Selon mon expérience 1, c'est le meilleur numéro, mais je conviendrais qu'il pourrait y avoir des situations rares qui pourraient exiger des appels simultanés.

Si je me souviens bien, IE est le seul navigateur qui limite les connexions à 2. Cela fait que vos requêtes sont en file d'attente et si vos 2 premières requêtes prennent plus de temps que prévu ou les deux autres demandes échoueront automatiquement. Dans certains cas, vous obtenez également le dialogue "autoriser le script à continuer" dans IE.

Si votre utilisateur ne peut vraiment rien faire jusqu'à ce que toutes les 4 demandes reviennent (en particulier avec les performances de JavaScript embarquées d'IE), je créerais un objet de transport qui contient les données pour toutes les demandes, puis un objet de transport qui peut être analysé et délégué sur revenir.

Je ne suis pas un expert en réseau, mais probablement quatre n'auraient pas beaucoup de problème pour une application de petite à moyenne, cependant, plus il y a de plus, plus la charge du serveur risque de causer des problèmes. Cela ne répond vraiment pas à vos questions, mais voici une suggestion. Si le délai n'est pas un problème, pourquoi ne pas utiliser une file d'attente.

 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 } 

Ce n'est probablement pas la meilleure façon de le faire, mais c'est l'idée que vous pourriez probablement le modifier pour faire 2 requêtes au lieu d'une seule. Aussi, peut-être que vous pourriez le modifier pour envoyer autant de requêtes que celles-ci dans la file d'attente en tant que demande. Ensuite, le serveur les divise et traite chacun d'eux et envoie les données. Tout à la fois, ou même s'il l'obtient, car le serveur peut rincer plusieurs fois les données. Il suffit de s'assurer que vous analysez correctement le texte de la réponse.