Ich habe eine bestimmte Seite, die viele Widgets verwendet, die von Javascript-Routinen (etwa 400, es ist eine komplexe) initialisiert werden müssen. Dies dauert einige Zeit (sogar 20 Sekunden auf langsameren Rechnern). Jetzt dachte ich, ich könnte einen Fortschrittsanzeiger (ein einfaches Textfeld mit einer prozentualen Bezeichnung) anstelle der Seite zeigen, aber ich entdeckte, dass die laufende Aufgabe, auch wenn ich sie kontinuierlich aktualisierte, alles blockiert und ich keine Aktualisierungen sehe. So bleibt alles eingefroren, bis die schwere Javascript-Aufgabe abgeschlossen ist. Ich habe sogar das folgende Experiment durchgeführt, sondern friert auch (und Firefox sagt, dass das Skript zu lange dauert abzuschließen ...):Eine lange Aufgabe in Javascript überwachen
function a(){
for (var i = 0; i < 5000000000000000; i++){
abb = i;
}
}
var abb;
function c(){
var ef = document.getElementById("pip");
ef.innerHTML = abb;
}
function b(){
setInterval(c, 50);
setTimeout(a, 1000);
}
Die einzige Lösung, die zu mir kommt, ist die lange Arbeit zu brechen in Stücke und update das Etikett .... aber ich frage mich, ob es eine andere Lösung gibt! Gott, JS braucht so schnell wie möglich Themen ... :)
Irgendwelche Ideen?
+1 Natürlich! Ich denke darüber nach, wenn alles andere fehlschlägt – ATorras
Ihre Lösung wird leider nicht funktionieren. Der Grund dafür ist, dass bis zur Rückkehr der langen Jobfunktion, selbst wenn sie andere anruft, nichts aktualisiert wird (zumindest bei FF). Der einzige Weg ist, eine globale Variable zu behalten, und so weitermachen: - Dinge von 1 bis 20, Update-Zähler, setTimeout (wie 1ms, nur um Vorvermehrung) mit Funktion dann Rückkehr - beim Rückruf, Dinge zu tun von 21 bis 40, setTimeout und so weiter ... Ich denke, das ist der einzige Weg, um diese Arbeit richtig zu bekommen, das heißt, Timesharing zu emulieren. – gotch4
... was genau die Lösung ist, die ich beschrieben habe – kdgregory