Javascript parallélisme

Eh bien, d'abord, je veux dire que je suis un peu nouveau dans le monde du développement Internet.

Quoi qu'il en soit, j'essaie de savoir s'il est possible d'exécuter deux morceaux de code en parallèle en utilisant javascript.

Ce dont j'ai vraiment besoin, c'est d'appeler deux méthodes qui se trouvent dans un serveur distant. Je passe, pour les deux, une fonction de rappel qui sera exécuté bientôt, les données que je souhaite sont prêtes. Comme le serveur exécutant ces fonctions prend un temps pour répondre, j'essaie de trouver un moyen d'appeler les deux méthodes en même temps sans attendre jusqu'à ce que la première termine d'appeler la seconde.

Des méthodes comme setTimeout sont-elles exécutées simultanément, par exemple

setTimeout(func1, 0); setTimeout(func2, 0); 

 function func1() { webMethod1(function() {alert("function 1 returned"); } ); } function func1() { webMethod2(function() {alert("function 2 returned"); } ); } 

Édité

Je viens de trouver cet article qui peut être très cool pour la réactivation des navigateurs suivants: Javascript web workers

Il existe un seul thread d'exécution en Javascript dans les WebBrowsers normaux: vos gestionnaires de minuterie seront appelés en série. Votre approche à l'aide de minuteries fonctionnera dans le cas où vous présentez.

Il y a une belle documentation sur les chronométreurs par John Resig (auteur du javascript jQuery très populaire – si vous êtes nouveau dans le développement Web, je vous suggère de le consulter).

Maintenant, si vous faites référence à des navigateurs basés sur HTML5, à un moment donné, ils devraient avoir un support de thread.

Oui, c'est exactement ce que les demandes Web via AJAX fonctionnent. Il n'est pas nécessaire de setTimeout sur 0, vous pouvez les appeler un par un et faire une requête AJAX, et cela sera exécuté de manière asynchrone, ce qui vous permettra de passer une fonction de rappel à invoquer lorsque la requête sera terminée.

Les moyens de créer une requête AJAX diffèrent selon le navigateur que vous utilisez. Si vous allez construire quelque chose qui dépend beaucoup d'AJAX, et que vous voulez qu'il fonctionne sur plusieurs navigateurs, vous êtes le meilleur avec une bibliothèque. Voici comment cela se fait dans jQuery, par exemple:

 $.ajax({ url: '/webrequesturl', success: function(result) { // this will be called upon a successful request } }); $.ajax({ url: '/webrequest2url', success: function(result) { // this will be called upon a successful request // this may or may not be called before the above one, depending on how long it takes for the requests to finish. } }); 

Eh bien, JavaScript est simple , les deux chronomètres fonctionneront séquentiellement l'un après l'autre, même si vous ne le remarquez pas.

Je vous recommande de donner un coup d'œil à l'article suivant, il explique vraiment comment fonctionnent les horloges et les événements asynchrones, cela vous aidera également à comprendre la nature simple de JavaScript:

  • Comment fonctionnent les temporisateurs JavaScript

Et en tant que solution de rechange, vous pouvez regarder les WebWorkers , c'est un moyen d'exécuter des scripts dans des threads d'arrière-plan distincts, mais ils ne sont supportés que par des navigateurs modernes.

Ce que vous recherchez est une communication asynchrone client-serveur (mot-clé: async). Les fonctions asynchrones retournent tout de suite, mais le rappel fourni sera exécuté après que la condition spécifiée est satisfaite.

Donc, si la fonction qui envoie une requête au serveur est asynchrone, cela vous permettrait d'envoyer les deux requêtes au serveur sans attendre une réponse.

L'utilisation de setTimeout peut fonctionner, car cela planifiera les deux fonctions d'envoi de requêtes à appeler. Cependant, certains navigateurs ne exécutent qu'un thread de Javascript à la fois, de sorte que le résultat serait que l'une des fonctions programmées fonctionnerait et bloquerait (en attente d'une réponse) et l'autre fonction programmée attendrait le premier pour commencer à courir .

Il est conseillé d'utiliser le support asynchrone de votre bibliothèque de communication serveur. Par exemple, jQuery utilise async par défaut.

Cela dépend du moteur JavaScript.