Flash fängt irgendwann anzu ruckeln (AS2)

SonMiko

Erfahrenes Mitglied
Hallo zusammen :),

mal wieder treibt mich ein Flash-Problem auf die Palme.
Es handelt sich dabei um eine Abfrage - genauer gesagt wir anhand eines Intervals
im 3 Sekunden-Takt ein Wert einer PHP Datei eingelesen.
Anfangs läuft alles sehr gut, aber irgendwann scheint es dann doch Probleme hinsichtlich der Geschwindigkeit zu geben - das Browser wird irgendwie arg langsam und Flash bremst ihn total aus...

Hier mal der Code
Code:
anzLadeversuche++;
myLoadVars.sendAndLoad("parameter",myLoadVars,"POST");
myLoadVars.onLoad = function(){
	if(myLoadVars.loaded){
			timeCheckRequests = setInterval(checkRequest, 3000);
		}
}

//Überprüfung
function checkRequest(){
	myLoadVars.sendAndLoad("request",myLoadVars,"POST");
	if(myLoadVars.wert=="true"){
		gotoAndStop(2);
	}
	else{
		gotoAndStop(1);
	}
}

Alles läuft einwandfrei - aber irgendwann geht der Browser in die Knie.
Eine andere Möglichkeit als den Interval gibts wohl leider nicht, oder?

Hat jemand Verbesserungsvorschläge?

Besten Gruß,

Euer

Mike
 
Alles läuft einwandfrei - aber irgendwann geht der Browser in die Knie.

Kurz drübergeschaut,
ist ja klar, bei jedem onLoad wird ein neues setInterval objekt instanziert.
Irgendwann hast so viele setinterval instanzen im Speicher das die Request Funktion damit nicht mehr klar kommt.

Hat jemand Verbesserungsvorschläge?
Das setinterval vor neuer instanzierung clearen oder nur ein setinterval Objekt benutzten.
 
Aber es sollte doch bloß eine Interval Instanz geben -
da, ich prüfe ob die Parameter geladen wurden (loaded) und dann
erzeuge ich den Interval.
 
da, ich prüfe ob die Parameter geladen wurden (loaded) und dann
erzeuge ich den Interval.

ja die parameter werden immer wieder aufs neue geladen, und deshalb wird auch immer wieder ein neues setinterval instanziert. ;)
(das alte setintervall läuft im hintergrund aber weiter, müßte also gecleared werden).

Aber wenn du mir nicht glaubst dann teste es mal so:
PHP:
var c=0;
//Überprüfung
function checkRequest() {
	trace(++c)
	myLoadVars.sendAndLoad("request",myLoadVars,"POST");
	if (myLoadVars.wert == "true") {
		gotoAndStop(2);
	} else {
		gotoAndStop(1);
	}
}

Der Aufruf der Funktion sollte immer öfter und schneller kommen.
 
Zuletzt bearbeitet:
Nene ich glaube dir schon :) - keine Frage.
Habe die funktion nur anders eingeschätzt.
Ich habe die OnloadSequenz auch mal weg gelassen und siehe da es klappt ohne Ruckler auch beo langem Gebrauch.

Du sagst die Daten werden wieder und wieder geladen?

Woran liegt das, am onLoad?
Ich verstehe das irgendwie nicht - ist es denn so dass dieses Ereignis mehrfach ausgeführt wird und wenn ja wieso? Es sollte doch eigentlich nur prüfen ob geladen wurde und dann ausführen...

Also es klappt wie gesagt, aber ich würds gerne noch nachvollziehen.
Die Referenz besagt zu onLoad:
"Wird aufgerufen, wenn ein LoadVars.load()- oder LoadVars.sendAndLoad()-Vorgang abgeschlossen wurde."

Wieso passiert es dann mehrfach?

Aber schonmal danke - klappen tuts nun schon besser.
 
Du sagst die Daten werden wieder und wieder geladen?
Mit diesem code
PHP:
myLoadVars.sendAndLoad("request",myLoadVars,"POST");
wird ein neuer Ladenvorgang gestartet. Wenn die Datei erfolgreich geladen werden konnte dann wird auch die onLoad Methode direkt aufgerufen und ein neues setinterval gestartet. Die alten setintervale laufen aber im Hintergrund weiter und feuern alle 3 sek weiterhin auf die checkRequest Funktion.

Helfen würde auch dieses hier:
PHP:
if (myLoadVars.loaded) {
		clearInterval(timeCheckRequests); //bestehendes setinterval löschen
		timeCheckRequests = setInterval(checkRequest, 3000);
	}
 
Zuletzt bearbeitet:
Hi,

ja - das verstehe ich ja alles, aber der LadenVorgang wird doch bloß einmalig ausgeführt.

Naja - es klappt und ich bin zufrieden :) - danke und liebe Grüße.
 
ja - das verstehe ich ja alles, aber der LadenVorgang wird doch bloß einmalig ausgeführt.

Naja.

Über die "Daten empfangen"-Funktion deines LoadVars erstellst du ein Interval. Mit diesem Interval löst du die Funktion "checkRequest" alle 3 Sekunden auf. In der Funktion rufst du einen sendAndLoad-Befehl auf, welcher irgendwas neu einlädt - das löst dann ultimativ noch einmal die "Daten empfangen"-Funktion auf, was wieder einen neuen, zweiten Interval erstellt - der parallel zum ersten immer wieder alle 3 Sekunden die Funktion "checkRequest" aufruft - ein Teufelskreis.
 
Ach du Sch... jetzt bemerke ich erst das ichs
total anders durchgeführt habe als ich es wollte - ist ja klar, ich habe zweimal dasselbe Objekt verwendet - was natürlich doofheit ist.
Klar das ich unten beim 3 Sekunden aufruf oben dasselbe Event erneut erhalte und damit auch die neuinstanziierung...

Es sollten eigentlich zwei Objekte sein, ich war faul und hatte es per copy und paste eingefügt :D... Das ist die Quittung dafür hehe...
 

Neue Beiträge

Zurück