0

Je suis nouveau sur JavaScript, alors pardonnez-moi d'être un n00b.Simulation de traitement parallèle en Javascript

Lorsqu'un calcul intensif est requis, il implique plus que probablement des boucles récursives ou non. Parfois cela peut signifier avoir une boucle récursive qui exécute quatre fonctions et peut-être que chacune de ces fonctions parcourt tout l'arbre DOM, lit les positions et fait des calculs pour la détection de collision ou autre chose.

Alors que la première fonction marche sur l'arbre DOM, la prochaine devra attendre que la première finisse, et ainsi de suite. Au lieu de cela, pourquoi ne pas lancer ces boucles à l'intérieur des boucles séparément, en dehors des programmes, et agir sur leurs calculs dans une autre boucle qui s'exécute plus lentement parce qu'elle ne fait pas ces calculs elle-même?

Retardé ou intelligent?

Merci d'avance!

+0

D'ABORD, pourquoi marchez-vous le dom tree? Pourquoi ne pas rassembler tous les éléments DOM qui pourraient entrer en collision et les mettre dans un tableau. Je suis sûr que c'est seulement quelques-uns qui sont des points de collision, pas tous. Deuxièmement, vous pouvez Pseudo multi-thread en javascript en utilisant la fonction setTimeout, par exemple. setTimeout (function() {...}, 1); exécutera la fonction donnée en 1 ms. – Zoidberg

+0

Bien que n'étant pas lié à votre question, vous pourriez trouver utile dans Chromes [NaCl] (https://developers.google.com/native-client/overview) utile –

Répondre

0

JavaScript n'a jamais été conçu pour effectuer de telles tâches intensives en termes de calcul, et même si cela est en train de changer, il n'en demeure pas moins que JavaScript est intrinsèquement monothread. La technologie récente web workers fournit une forme limitée de multi-threading mais ces threads de travail ne peuvent pas accéder au DOM directement; ils peuvent seulement envoyer/recevoir des messages au thread principal qui peut alors y accéder en leur nom.

0

Actuellement, la seule façon d'avoir un vrai traitement parallèle dans JS est d'utiliser Web Workers, mais il n'est supporté que par les navigateurs très récents. Et si votre programme nécessite une telle chose, cela peut signifier que vous n'utilisez pas les bons outils (par exemple, marcher dans l'arbre DOM est généralement fait en utilisant des sélecteurs DOM comme querySelectorAll).

4

Les calculs à long terme sont exactement ce que Web Workers sont pour. Ce que vous décrivez est le schéma commun des fils de producteur et/ou de consommation. Bien que vous puissiez le faire à l'aide de Web Workers, la surcharge de synchronisation surpasserait probablement tous les gains, même sur des systèmes hautement parallèles.

JavaScript n'est pas le langage idéal pour les applications exigeantes en termes de calculs. En outre, la puissance de traitement des machines de navigateur Web peut varier énormément (pensez à un smartphone bas de gamme par rapport à un poste de travail 16core). Par conséquent, envisagez de calculer des éléments complexes sur le serveur et d'envoyer le résultat au client à afficher.

Pour votre application Web quotidienne, vous devez adopter une approche monothread et analyser les performances dès qu'elles deviennent un problème. Heck, pourquoi ne pas demander de l'aide sur votre problème de performance ici?

Questions connexes