Wie kann ich den Browser zum Neuzeichnen zwingen, während mein Skript eine schwere Verarbeitung ausführt?

8

Ich verwende die innerHTML -Eigenschaft, um eine DIV dynamisch zu ändern, um über einen Prozess zu berichten, der ein paar Sekunden braucht, um zu beenden. Das Problem ist, dass in Firefox die Seite nicht wirklich neu gerendert wird, um diese Änderung widerzuspiegeln, bis das Skript beendet ist. Dies macht die App träge. Gibt es eine Möglichkeit sicherzustellen, dass Änderungen am HTML-Code sofort angezeigt werden, auch wenn mehr Skripts ausgeführt werden?

    
Shog9 30.07.2009, 22:12
quelle

2 Antworten

14

Der Browser ist single-threaded. Während das Skript läuft, kann der Browser nichts anderes tun. Wenn Sie etwas wie eine Fortschrittsanzeige machen möchten, müssen Sie setTimeout() oder setInterval() , und zerlege deine Aufgabe in kleinere Stücke, die in einem Intervall laufen. Dadurch bleiben Lücken zwischen den Skriptläufen bestehen, die dem Browser die Kontrolle zurückgeben, wo der Browser neu zeichnen kann.

    
Breton 30.07.2009 22:17
quelle
6

Versuchen Sie, Ihr Skript regelmäßig zu unterbrechen. Sie sollten

verwenden können %Vor%

liefert die notwendige Unterbrechung ohne lange Verzögerung, wobei nextFunction die Funktion ist, die mit Ihrer langwierigen Verarbeitung fortfährt.

    
edsoverflow 30.07.2009 22:17
quelle

Tags und Links