2009-10-13 7 views
0

J'essaie d'améliorer les performances d'une méthode Web dans l'une de nos applications. J'ai aussi loin que je peux avoir la méthode web dans un seul serveur, alors j'ai pensé que j'essaierais de diviser le processus pour qu'il fonctionne sur plusieurs serveurs.Question asynchrone JavaScript - Fire an Forget

À l'heure actuelle, une demande xmlhttp on fait passer un tableau (quepasatio) avec tous les objets à traiter par le procédé Web, voir le code ci-dessous:

xmlHttp.send (« object = » + quepasatio + "& Type =" + Type + "& ToId =" + Guid + "& ToName =" + Nom "; Ce que j'ai fait est de diviser le tableau quepasatio en deux et d'envelopper le xmlhttp dans une boucle for, mais cela ne semble pas accélérer le processus. Ce que j'essaye de faire est d'envoyer les demandes de xmlhttp sans attendre la réponse, de sorte que la deuxième, troisième, ... nths demande soit envoyée immédiatement après le premier.

Des idées?

TIA

Répondre

1

Vous envoyez probablement tout d'un seul coup et ayant le serveur le casser. De nombreux navigateurs ont des limites de connexion qui limitent le nombre de requêtes pouvant être en attente avec le serveur. Envoyer tout cela à un proxy qui le divise ensuite signifie une seule connexion qui peut être arrêtée immédiatement une fois qu'il est envoyé. Mais vous aurez aussi besoin d'un mécanisme d'interrogation pour récupérer les résultats partiels (si c'est ce que vous cherchez), ce qui complique le problème.

0

La raison pour laquelle cela n'accélère pas le processus est que les demandes sont mises en file d'attente sur le serveur. Le serveur ne traitera qu'une demande à la fois de chaque utilisateur.

Si vous souhaitez que les appels soient démarrés en parallèle, vous devez réduire le nombre de sessions du service Web afin qu'il ne place pas les demandes en file d'attente.

+0

De quel serveur parlons-nous ici? –

+0

@crescentfresh: ASP.NET sur IIS par exemple. – Guffa

+0

Vraiment? IIS ne peut traiter qu'une demande à la fois? Que signifie "de chaque utilisateur"? –

2

Changez votre méthode ouverte:

xmlHttp.open("GET", url, true); 

Cela fera appel à vous envoyer être async; plus d'info here