Verzögerung im IE5.5
Christian
- javascript
0 MM0 Walter Zorn
Hallo!
Ich habe ein kleines Script geschrieben, das etwas länger rechnet. Nach ca. 10 Sekunden fragt der IE nach, ob dieses Script abgebrochen werden soll.
Weiss jemand, wo (oder ob) man dieses (Fast-)Timeout einstellen kann?
mfg
Du hast das ganze wahrscheinlich in einer FOR- oder WHILE-Schleife, die ihn unterb´rochen beschäfitgt ?!?
Mach das ganze einfach mit einem setInterval().
Dann geht es zwar etwas langsamer, aber er müsste eigentlich nicht nachfragen. Ausserdem kann der Benutzer während dem Rechen-Vorgang auch jederzeit abbrechen (Indem er die Seite z.B. schließt).
LG,
MM
Ja, schon, aber...
Das Problem liegt nicht darin, dass es mir das Script zu lange dauert bzw. ich es abbrechen möchte. Ich WEISS, dass das Script 0-2 Minuten rechnet. Ich möchte die lästige Nachfrage des IE einfach wegschalten.
Du hast das ganze wahrscheinlich in einer FOR- oder WHILE-Schleife, die ihn unterb´rochen beschäfitgt ?!?
Mach das ganze einfach mit einem setInterval().
Dann geht es zwar etwas langsamer, aber er müsste eigentlich nicht nachfragen. Ausserdem kann der Benutzer während dem Rechen-Vorgang auch jederzeit abbrechen (Indem er die Seite z.B. schließt).
LG,
MM
Ja, schon, aber...
Das Problem liegt nicht darin, dass es mir das Script zu lange dauert bzw. ich es abbrechen möchte. Ich WEISS, dass das Script 0-2 Minuten rechnet. Ich möchte die lästige Nachfrage des IE einfach wegschalten.
Tja - dafür weiß ich leider nicht weiter ...
LG,
MM
Nach ca. 10 Sekunden fragt der IE nach, ob dieses Script abgebrochen werden soll.
Weiss jemand, wo (oder ob) man dieses (Fast-)Timeout einstellen kann?
Hallo!
Falls ich die Frage richtig verstanden habe:
im Browser (IE) einstellen kann man das sicherlich nicht.
Ich gehe mal davon aus, daß die Berechnung in einer Schleife läuft (?).
Mit folgendem Trick scheinen (nahezu) endlose Berechnungen trotzdem zu funktionieren (auf die Schnelle nur im IE6 getestet):
Dafür sorgen, daß die Schleife rechtzeitig abgebrochen wird, und aus der Schleife heraus die Funktion erneut aufrufen (mit einem setTimeout, der ruhig 0 sein darf, damit es keinen Stack-Overflow gibt). Natürlich mußt Du deine Berechnungsergebnisse in globalen Vars ablegen (oder den Funktionsaufrufen mitgeben), damit sie bei den rekursiven Funktionsaufrufen erhalten bleiben.
Beispiel (Berechnung, die nur i incrementiert):
var i = 0; //Berechnungsergebnis
function CALC()
{
while (true)
{
i++;
if (i%1000==0)
{
setTimeout('CALC()',0);
break;
}
}
}
Es wäre vielleicht einen Versuch wert, den Schleifenabbruch von einer Zeitdifferenz zum Schleifenbeginn abhängig zu machen (beim IE also kürzer als 10 s), um von der Geschwindigkeit des Rechners unabhängig zu werden.
So oder so wird die Geschwindigkeit unter diesem Trick wohl etwas leiden, weil in jedem Schleifendurchlauf eine zusätzliche Abfrage erforderlich ist (und bei der Zeitdifferenz-Abfrage eine Zeitberechnung). Die nur "selten" erfolgenden rekursiven Funktionsaufrufe dürften hingegen praktisch keine Rolle für die Performance spielen.
Viele Grüße
Walter
Besten Dank.
Der Tip mit dem setTimeout war gut. Hat allerdings seltsame Nebeneffekt. Der Browser ließ sich im Folgendem nur noch sehr bedingt benutzen. Dabei waren es "nur" 1440 setTimeout -Aufrufe. Danach produzierte der Browser massig Seitenzugriffsfehler, die man im TaskManager beobachten konnte. Ob das allerdings am Versuch oder an der Methode lag weiss ich noch nicht...
Danke erst mal, da kann ich ja noch ein wenig forschen...
P.S. mit dem Timeout klappt es meistens, da jedoch ein iterativer Teil einen rekursiven aufruft, der wiederum je nach Datenlage mitunter länger braucht als die 10 Sekunden muss ich da auch noch Hand anlegen...