Javascript async-loop-Verarbeitung
Ich habe eine javascript-Schleife, die einige Zeit zum verarbeiten. Ich wünschte, ich könnte schlank es nach unten, aber es hat zum verarbeiten einer großen Menge von Daten. Während es läuft der browser nicht mehr reagiert natürlich. Ich habe gelesen, der beste Weg, dies zu behandeln, die in javascript verwendet eine asynchrone Schleife einiger Sortieren. Dieser Weg, Maus Klicks, etc. weiter verarbeitet werden zwischen loop-Verarbeitung. Gibt es irgendein standard-asynchrone frameworks, die gut funktionieren wird für das? Oder kann jemand ein einfaches Beispiel, wie das codiert werden? Danke!
- mögliche Duplikate von Asynchron zum Zyklus in JavaScript
- Muss es sein, IE-kompatibel ist? Wenn nicht, würde ich vorschlagen, Blick in Webworker mozilla-tutorial
- Leider hat es ja auf der Arbeit mit IE8.
- bitte Lesen Sie meine Antwort über die Verwendung von $.Latente hier [stackoverflow.com/questions/4288759/... [1]: stackoverflow.com/questions/4288759/...
- Die akzeptierte Antwort auf diese Frage ist auch eine Antwort für die dup. Es ist definitiv ein dup.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider Webworker sind noch nicht verfügbar auf jedem browser. Ich habe mit dem "setTimeout(Func,0);" trick für ein Jahr. Hier einige der jüngsten Forschung, die ich schrieb, um zu erklären, wie es zu beschleunigen ein bisschen. Wenn Sie wollen einfach nur die Antwort, springen Sie zu Schritt 4. Schritt 1, 2 und 3 erläutern Sie die Argumentation und mechanik;
Brechen einfach die Arbeit in Blöcken und Prozess ein Stück zu einer Zeit. Der code hier ist ein guter Ausgangspunkt, aber verwenden
setImmediate
odersetTimeout
aufrufen, die nächste iteration der Schleife.Den richtige Weg, um Ihr problem zu lösen, ist die Verwendung Web-Worker, die die Ausführung von code in einem separaten thread.
Array.sort
-- Sie können nicht brechen, dass die arbeiten bis in Teile zerlegt, da es eine einzelne Methode aufrufen. Würden Sie implementieren müssen, um Ihre eigene Art Algorithmus, der kann langsamer als der native-Algorithmus (aber würden Sie wirklich einen benchmark, um zu wissen, die wahren Auswirkungen auf die Leistung).Können Sie einfach wickeln Sie jede iteration der Schleife in einer
setTimeout
wie so (siehe jsfiddle):