Ist es möglich, Dinge asynchron in Javascript (AJAX beiseite) zu tun? Zum Beispiel, um mehrere Arrays gleichzeitig zu iterieren. Wie wird es gemacht? Ein kurzes Beispiel wäre schön. Auf der Suche nach diesem war wegen der ganzen Ajax-Verschmutzung, die ich nicht suche, schwer.
Vielen Dank im Voraus.
Verwenden Sie Web Workers . Bedenken Sie jedoch, dass es sich um eine sehr neue Funktion handelt und nicht alle Browser vollständig unterstützt werden.
Wie von Grumdrig angegeben, können Sie Code wie folgt schreiben:
%Vor%Aber es wird immer noch nicht gleichzeitig ausgeführt. Hier ist eine allgemeine Vorstellung davon, was passiert, nachdem solche Timeouts aufgerufen wurden:
setTimeout
-Aufrufen wird sofort ausgeführt, einschließlich der Rückkehr zu aufrufenden Funktionen. onclick
und onmousemove
. In diesem Fall werden die diesen Ereignissen zugeordneten Funktionen auf Kosten der Timergenauigkeit ausgeführt. Offensichtlich gibt es keinen Leistungsvorteil beim Ausführen von Code wie diesem. In jedem Fall werden die Dinge länger dauern. Wenn jedoch eine einzelne Aufgabe so lange dauert, dass der Browser einfriert (und möglicherweise die Browserwarnungen "Skript dauert zu lange"), kann es hilfreich sein, sie in kleinere, schneller ausführende Teile zu zerlegen, die nach einer gewissen Verzögerungszeit sequenziell ablaufen So hat der Browser etwas Zeit zum Atmen.
Web Workers wurden erwähnt, und wenn Sie sich nicht um die IE-Kompatibilität kümmern, können Sie sie für echte Parallelität verwenden. Es gibt jedoch einige ernsthafte Einschränkungen hinsichtlich ihrer Verwendung, die aus Sicherheitsgründen auferlegt werden. Zum einen können sie nicht mit dem DOM interagieren, dh Änderungen an der Seite müssen immer noch synchron erfolgen. Außerdem werden alle Daten, die an und von Workern übergeben werden, während der Übertragung serialisiert, was bedeutet, dass echte JavaScript-Objekte nicht verwendet werden können. Für eine intensive Datenverarbeitung sind Web Worker wahrscheinlich eine bessere Lösung, als eine Funktion in mehrere zeitverzögerte Aufgaben aufzuteilen.
JavaScript ist normalerweise single-threaded; Sie können nicht mehrere Dinge gleichzeitig tun. Wenn Ihr JavaScript-Code zu langsam ist, müssen Sie die Arbeit auslagern. Der neue Weg besteht darin, Web-Worker zu verwenden, wie andere bemerkt haben. Der alte Weg ist oft, AJAX zu verwenden und stattdessen die Arbeit auf dem Server zu erledigen. (Entweder mit Web Worker oder mit AJAX müssten die Arrays serialisiert und das Ergebnis deserialisiert werden)
Ich muss MooGoo zustimmen, ich frage mich auch, warum Sie auf einmal so ein großes Array durchgehen würden.
Es gibt eine Erweiterung für JavaScript namens StratifiedJS , mit der Sie mehrere Dinge gleichzeitig ausführen können, solange sie asynchron sind. Auch Webworker sind eine peinliche "Lösung", die Dinge nur komplizierter macht, auch funktionieren sie nicht im IE.
In StratifiedJS könnten Sie einfach schreiben.
%Vor%Tags und Links javascript asynchronous