multithread et AJAX

Le
Etienne SOBOLE
Salut.
J'ai voulu essayer les requetes AJAX dans le cadre d'un developpement
demandant beaucoup de ressource.

A ma grande surprise, l'envoie de 4 requetes AJAX asynchrones de n'executent
pas en parallele sur mon serveur.
Alors :
- Est ce due au navigateur qui décide de les executer de façon séquentielle
?
- Est ce due à ma config Apache qui est mal faite et qui limite
l'utilisation du CPU pour une meme ??? session ?

Voila.
quelqu'un a t-il deja réussi a faire ca?

J'ai bien trouvé un truc sur internet, mais je gars faisait des sleep en
parallèle et là effectivement ca fonctionne car le sleep rend la main pour
que d'autres tâche s'execute mon probleme c'est que moi je fais des
calculs intessifs !

A+
merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Mevzek
Le #6799421
Le Sat, 07 Jun 2008 16:26:14 +0200, Etienne SOBOLE a écrit:
A ma grande surprise, l'envoie de 4 requetes AJAX asynchrones de n'executent
pas en parallele sur mon serveur.
Alors :
- Est ce due au navigateur qui décide de les executer de façon séquentielle
?


Je pense, oui. Car les navigateurs mettent une limite au nombre simultané
de connexions ouvertes vers un même serveur.
Ca peut se configurer dans les navigateurs, mais IIRC la valeur par défaut
est justement 4.

Cf
http://www.websiteoptimization.com/speed/tweak/parallel/
http://support.microsoft.com/kb/183110
http://www.maximumpcguides.com/speedup-internet-explorer-7-by-increasing-the-connections-limit/

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co

Etienne SOBOLE
Le #7005221
Hum...
C'est en effet tres byzarre.

Je suis passé sour Apache 2.0 pour commencé, puis j'ai ecrit un petit script
qui calcule des mandlebrots...
et j'ai lancé dans une page Web 4 requete AJAX executant le script.

lorsque j'affiche ma page,
IE lance 4 process simultané
et FireFox 2

Mais je plus etrange c'est que si je fais un F5 pour rafraichir la page,
alors là les deux navigateurs n'en lance plus qu'un seul à la fois.
et si j'execute ces calculs en les démarrant avec un bouton (donc pas au
chargement de la page) et ben là aussi il ne me les execute qu'un par un !!!

C'est etrange et relou !!!
J'ai modifié la base de registre et ca ne change strictement rien au
comportement.
Je filerai bien un carambar a celui qui me trouve une solution... Meme
limité à 4 process, ca serait deja plutot bien :)

Etienne

"Patrick Mevzek" news: 484ac065$0$29486$
Le Sat, 07 Jun 2008 16:26:14 +0200, Etienne SOBOLE a écrit:
A ma grande surprise, l'envoie de 4 requetes AJAX asynchrones de
n'executent
pas en parallele sur mon serveur.
Alors :
- Est ce due au navigateur qui décide de les executer de façon
séquentielle
?


Je pense, oui. Car les navigateurs mettent une limite au nombre simultané
de connexions ouvertes vers un même serveur.
Ca peut se configurer dans les navigateurs, mais IIRC la valeur par défaut
est justement 4.

Cf
http://www.websiteoptimization.com/speed/tweak/parallel/
http://support.microsoft.com/kb/183110
http://www.maximumpcguides.com/speedup-internet-explorer-7-by-increasing-the-connections-limit/

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co



YD
Le #7005341
[...] j'ai lancé dans une page Web 4 requete AJAX executant le script.

lorsque j'affiche ma page,
IE lance 4 process simultané
et FireFox 2


Si tu maîtrises la configuration des clients, tu peux essayer
de jouer sur les réglages de Firefox (URI about:config puis
filtrer les options avec network.http.)... Sans garantie.

--
Y.D.

Etienne SOBOLE
Le #7005611
Alors il s'agit effectivement d'une application spécifique,
donc utilée par peu de personnes.

mais elle utilisent Internet explorer...

Pour le moment j'ai fais un retour dans le passé. a la grande epoque oùu
Ajax n'existait pas.
Je créée donc des iframes à à la volée...
et là pour peu que j'ai des sous domaine différents ca fonctionne.
Donc j'ai créé 8 sous domaines

th1.domain.com
th2.domain.com
th3.domain.com
...

et par roulement j'utilise le suivant.

C'est pas très beau mais ca fonctionne.
Un effet de bord interessant c'est que ca permet de gérer la priorité des
threads !!!
par exemple je peux dire que les requete standard utilisent toute
th1.domain.com et qu'en cas de besoin en CPU j'utilise les autres domaine.

C'est drôle !!!
voila
a+

Ps: mais je suis toujours à la recherche d'une solution propre a base
d'Ajax.
Etienne

"YD" 4853f94e$0$13944$
[...] j'ai lancé dans une page Web 4 requete AJAX executant le script.

lorsque j'affiche ma page,
IE lance 4 process simultané
et FireFox 2


Si tu maîtrises la configuration des clients, tu peux essayer
de jouer sur les réglages de Firefox (URI about:config puis
filtrer les options avec network.http.)... Sans garantie.

--
Y.D.



Etienne SOBOLE
Le #7005691
Ouai enfin ca paralellise mais pour le moment j'arrive pas à récuperer le
résultat !!!
pas glop !

"Etienne SOBOLE" 485404c7$0$32734$
Alors il s'agit effectivement d'une application spécifique,
donc utilée par peu de personnes.

mais elle utilisent Internet explorer...

Pour le moment j'ai fais un retour dans le passé. a la grande epoque oùu
Ajax n'existait pas.
Je créée donc des iframes à à la volée...
et là pour peu que j'ai des sous domaine différents ca fonctionne.
Donc j'ai créé 8 sous domaines

th1.domain.com
th2.domain.com
th3.domain.com
...

et par roulement j'utilise le suivant.

C'est pas très beau mais ca fonctionne.
Un effet de bord interessant c'est que ca permet de gérer la priorité des
threads !!!
par exemple je peux dire que les requete standard utilisent toute
th1.domain.com et qu'en cas de besoin en CPU j'utilise les autres domaine.

C'est drôle !!!
voila
a+

Ps: mais je suis toujours à la recherche d'une solution propre a base
d'Ajax.
Etienne

"YD" 4853f94e$0$13944$
[...] j'ai lancé dans une page Web 4 requete AJAX executant le script.

lorsque j'affiche ma page,
IE lance 4 process simultané
et FireFox 2


Si tu maîtrises la configuration des clients, tu peux essayer
de jouer sur les réglages de Firefox (URI about:config puis
filtrer les options avec network.http.)... Sans garantie.

--
Y.D.







SAM
Le #7007361
Ouai enfin ca paralellise mais pour le moment j'arrive pas à récuperer le
résultat !!!


ha! oui ! pour sûr !
avec des domaines différents fallait un peu s'y attendre :-(

pas glop !


glup glup

--
sm

SAM
Le #7007401

et par roulement j'utilise le suivant.


et pourquoi ne groupes-tu pas ?
json ne pourrait-il pas t'être d'une certaine aide ?

--
sm

Etienne SOBOLE
Le #7009451
Nan json ne sert a rien dans ce cas, mais j'ai fini par trouver une
solution...

Lors d'un requete, je crée dynamiquement un iframe avec un id unique.
Je colle dans le src de mon iframe mon appel ajax en lui envoyant l'id de
mon iframe.
Mon process calcul puis crée un fichier qui porte le nom de l'id
Je teste coté navigateur le onload (pour firefox) et le readyState (pour
Internet explorer)
Et ensuite je fais une requete ajax synchrone sur le nom du fichier depuis
le domain original pour récupérer le résultat.

J'ai réussi (une fois à planter firefox en faisant ça, je sais pas trop
pourquoi) et sous IE aucun plantage.
Donc globalement ca fonctionne bien...

J'ai réussi à mettre à plat mon octo-processeur, et ça... ca fait plaisir :)
Autant dire que pour des applications complexes qui demandent beaucoup de
calculs à un instant t (c'est le cas de la mienne) et ben c'est plutot tres
intéressant.

Voila.
Bon c'est pas terriblement bô, mais ca fait ce que ca doit faire !

Etienne

"SAM" de news: 48546568$0$919$

et par roulement j'utilise le suivant.


et pourquoi ne groupes-tu pas ?
json ne pourrait-il pas t'être d'une certaine aide ?

--
sm



SAM
Le #7009681

Lors d'un requete, je crée dynamiquement un iframe avec un id unique.
Je colle dans le src de mon iframe mon appel ajax en lui envoyant l'id de
mon iframe.
Mon process calcul puis crée un fichier qui porte le nom de l'id
Je teste coté navigateur le onload (pour firefox) et le readyState (pour
Internet explorer)
Et ensuite je fais une requete ajax synchrone sur le nom du fichier depuis
le domain original pour récupérer le résultat.


Boudiou ! c'qui faut pas faire !
et ça pour les xxx requêtes simultanées ?

--
sm

Etienne SOBOLE
Le #7010041
et ça pour les xxx requêtes simultanées ?


Oui. Ca fonctionne bien !!!
Tres bien même....

Bon apres tu as les mêmes problemes que pour le programmation multithread
normale, mais tu es bien aidé par le fait que le javascript lui n'est pas
multithreadé (pour le moment !!!)...
Donc aucun risque que deux résultats des requètes arrivent en meme temps et
que le navigateur s'y perde à essayer de créer simultanément des objets.

Le seul test à faire, c'est vérifier si tu fais deux requètes devant
modifier les memes objet HTML la modification se fait dans le bon ordre...
m'enfin ca c'est pas le plus compliqué !

voila...
bon ben y a pluqu'a trouver d'autre application qui utilisent ce gerne de
truc :) :) :)

Publicité
Poster une réponse
Anonyme