OVH Cloud OVH Cloud

Lancer plusieurs mêmes fonctions ayant des valeurs différentes simultanément

17 réponses
Avatar
Sevenup
Bonjour !

Comme dit dans le titre, il semblerait que j'aie un léger souci en
programmation en Javascript. J'aimerais lancer simultanément plusieurs
fonctiontest(nombredepatates,nombredepommes) par exemple (4 ou 5
fonctions simultanément en fait), avec à chaque fois un nombredepatates
et un nombre de pommes différents.

Auriez-vous une méthode pour y parvenir?

Merci infiniment à tous par avance :)

Kevin - Sevenup

7 réponses

1 2
Avatar
SAM
(snip)
function titrage(){
getPage('titrage.php?title=r','titrage_m2r');
getPage('titrage.php?title=m','titrage_m2m');
getPage('titrage.php?title=s','titrage_m2s');
getPage('titrage.php?title=a','titrage_m2a');
}
function reloadpoch(){
string="titrage()";
b = setInterval(string,30000);
}



le problème est toujours le même, bouhouhouh :p
Personne n'a d'autre solution? Je désespère :o


on peut connaitre le contenu (le script) de la fonction getPage() ?

La fonction getPage(page,div) load une page externe dans la div

précisée, par le biais d'ajax.



Et donc comment comptes-tu espérer que le serveur te servira les 4 pages
en même temps ? (ou du moins que ton ordi+navigateur les reçoive en même
temps ? (ou en un bref instant)

Je crois avoir vu que les multi-appels Ajax sont un peu un soucis.
(c'est une question qui semble revenir)

<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/9400ca40f7e3e1ac/36b53b56ce608a74?#36b53b56ce608a74>
<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/ad4c047538e71c5e/ab9a985ddf0b960f?#ab9a985ddf0b960f>
<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/531d213b79e7120c/91e6f3f2dd9b35e4?#91e6f3f2dd9b35e4>
<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/d19fc4892f54124c/e93f551d2e0aced7?#e93f551d2e0aced7>
<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/3db2fb599b5a86ed/1dc89bbd3b6b75e5?#1dc89bbd3b6b75e5>
<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/ef59c18d8fecff50/0e86f58047d5b35b?#0e86f58047d5b35b>
<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/392d5d16a95fe66d/8a451e0f077b93e0?#8a451e0f077b93e0>
<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/404cebcfd1ba26ac/a240672e1ca4723f?#a240672e1ca4723f>


--
sm





Avatar
Sevenup
(snip)
function titrage(){
getPage('titrage.php?title=r','titrage_m2r');
getPage('titrage.php?title=m','titrage_m2m');
getPage('titrage.php?title=s','titrage_m2s');
getPage('titrage.php?title=a','titrage_m2a');
}
function reloadpoch(){
string="titrage()";
b = setInterval(string,30000);
}



le problème est toujours le même, bouhouhouh :p
Personne n'a d'autre solution? Je désespère :o


on peut connaitre le contenu (le script) de la fonction getPage() ?

La fonction getPage(page,div) load une page externe dans la div

précisée, par le biais d'ajax.



Et donc comment comptes-tu espérer que le serveur te servira les 4 pages
en même temps ? (ou du moins que ton ordi+navigateur les reçoive en même
temps ? (ou en un bref instant)

Je crois avoir vu que les multi-appels Ajax sont un peu un soucis.
(c'est une question qui semble revenir)

<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/9400ca40f7e3e1ac/36b53b56ce608a74?#36b53b56ce608a74>

<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/ad4c047538e71c5e/ab9a985ddf0b960f?#ab9a985ddf0b960f>

<http://groups.google.com/group/fr.comp.lang.javascript/browse_frm/thread/531d213b79e7120c/91e6f3f2dd9b35e4?#91e6f3f2dd9b35e4>

<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/d19fc4892f54124c/e93f551d2e0aced7?#e93f551d2e0aced7>

<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/3db2fb599b5a86ed/1dc89bbd3b6b75e5?#1dc89bbd3b6b75e5>

<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/ef59c18d8fecff50/0e86f58047d5b35b?#0e86f58047d5b35b>

<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/392d5d16a95fe66d/8a451e0f077b93e0?#8a451e0f077b93e0>

<http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/404cebcfd1ba26ac/a240672e1ca4723f?#a240672e1ca4723f>



Ah mince oui..

Et y a-t-il alors une solution en lançant par exemple une fonction qui
lance à son tour chaque getPage à intervalle régulier (par ex le getPage
1 se lance, 2 sec après le getPage 2 se lance également, etc., peu
importe l'intervalle entre les getPage pourvu qu'ils se soient lancés
tous dans l'intervalle donné du setTimeout)?
Merci en tout cas pour vos réponses et éclaircissements =)






Avatar
SAM

Je crois avoir vu que les multi-appels Ajax sont un peu un soucis.
(c'est une question qui semble revenir)
(snip)


Ah mince oui..
Et y a-t-il alors une solution en lançant par exemple une fonction qui
lance à son tour chaque getPage à intervalle régulier


à mon idée, mais je peux me tromper,
- appel Ajax url 1
- retour du truc mis en tampon (div caché) -> appel Ajax url 2
- retour du truc 2 -> tampon -> appel ... etc
- retour du dernier truc -> Ta daaa dzim boum boum ->
on montre le(s) tampon(s)

doit être le plus simple à faire.
Même si on peut théoriquement lancer 2 requêtes successives
(il faudra attendre le retour d'une des 2 pour lancer la suivante).

(par ex le getPage
1 se lance, 2 sec après le getPage 2 se lance également, etc.,


Non, on ne peut compter sur un temps d'attente (je n'ai pas l'ADSL
20megamax par exemple).

Il n'y a que le retour http 200 qui peut dire que c'est arrivé (ou en
train de) et qui puisse permettre de passer à la suite.



function getPage(num) {
http_request = new XMLHttpRequest();
// tous les blabla z'indipensables ajaquessiens

http_request.onreadystatechange = function() { Contents(num); };
http_request.open('GET', urls[num], true);
}

function Contents(num) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var content = http_request.responseText;
document.getElementById('contenu'+num).innerHTML = content;
num++;
if(num < urls.length) getPage(num);
else montreMesDivs();
}
}
}

var urls = new Array(
'http://site/dossier1/page1.htm',
'http://site/dossier4/page3.htm',
'http://site/dossier2/page32.htm',
'http://site/dossier0/page10.htm'
)


et on lance l'appel général avec getPage(0);

--
sm


Avatar
BertrandB
(snip)
function titrage(){
getPage('titrage.php?title=r','titrage_m2r');
getPage('titrage.php?title=m','titrage_m2m');
getPage('titrage.php?title=s','titrage_m2s');
getPage('titrage.php?title=a','titrage_m2a');
}
function reloadpoch(){
string="titrage()";
b = setInterval(string,30000);
}


Ca ne répond pas à ta question, mais setInterval() (comme
setTimeout()) accepte un objet fonction en premier argument.

function reloadpoch(){
b = setInterval(titrage,30000);
}


Ok merci, mais le problème est toujours le même, bouhouhouh :p

Personne n'a d'autre solution? Je désespère :o



on peut connaitre le contenu (le script) de la fonction getPage() ?

La fonction getPage(page,div) load une page externe dans la div

précisée, par le biais d'ajax.


XmllHttprequest avec son mode asynchrone répond exactement à ta demande
il faut juste scinder la fonction en un lancement et une fonction
callback d'affichage.

Du fait que les navigateurs sont en général régler pour pouvoir lancer 5
requêtes simultanées on a donc 5 pseudo thread. Il faut juste bien se
méfier des effets de bords il n'y a aucun mécanisme de synchronisation
(lock sémaphore etc ...)

C'est ce que j'utilise dans l'inénarable chtioblogue.





Avatar
SAM
La fonction getPage(page,div) load une page externe dans la div
précisée, par le biais d'ajax.


XmllHttprequest avec son mode asynchrone répond exactement à ta demande
il faut juste scinder la fonction en un lancement et une fonction
callback d'affichage.

Du fait que les navigateurs sont en général régler pour pouvoir lancer 5
requêtes simultanées on a donc 5 pseudo thread.


5 ?
J'avais lu qu'il ne fallait compter que sur 2

Il faut juste bien se
méfier des effets de bords il n'y a aucun mécanisme de synchronisation
(lock sémaphore etc ...)


C'est à dire que si le premier truc arrive avec des images, ça va
commencer à les charger (occuper 1 ou + des 5 voies), non ?
et peut-être mettre la zone dans la réception des autres trucs qui se
bousculent au portillon ?

C'est ce que j'utilise dans l'inénarable chtioblogue.


Violons et contrebasses :-)

--
sm


Avatar
SAM
XmllHttprequest avec son mode asynchrone répond exactement à ta
demande
Du fait que les navigateurs sont en général régler pour pouvoir lancer
5 requêtes simultanées on a donc 5 pseudo thread.


5 ?
J'avais lu qu'il ne fallait compter que sur 2


Tien ? oui, il semblerait que ça fonctionne bien :
<http://www.digitalbonsai.com/xhrmulti.php>
même pas besoin d'attendre le retour de l'un pour lancer l'autre.

--
sm


Avatar
BertrandB
XmllHttprequest avec son mode asynchrone répond exactement à ta
demande Du fait que les navigateurs sont en général régler pour
pouvoir lancer 5 requêtes simultanées on a donc 5 pseudo thread.


5 ?
J'avais lu qu'il ne fallait compter que sur 2


Tien ? oui, il semblerait que ça fonctionne bien :
<http://www.digitalbonsai.com/xhrmulti.php>
même pas besoin d'attendre le retour de l'un pour lancer l'autre.

Bien sur que ça fonctionne bien

Il faut autant d'objet xml truc muche que de requêtes parallèle
Il ne faut pas que les fonctins de mises à jour mettent à jour au même
moment le même objet et essayer de rendre les modificatin de l'arbre DOM
atomique (Là les bombes atomiques vont être les réponses)
Et pour le passage des paramètres à la fonction de retour comprendre le
fonctionnement des closures.

sur le nombre de requête en parallèle sur mon firefox j'ai :
network.http.max-connections-per-server 8
network.http.max-persistent-connections-per-server 2
network.http.pipelining.maxrequests 4

donc on peut en balancer 8 en parallèles mais rien n'empèche de balancer
la méga sauce le navigateur se démerdera.



1 2