Speicherverbrauch für Script

Hallo erstmal,

ich hätte da eine Frage zum Verständnis.

Ich habe auf einer Seite ein JavaScript für einen Text-Ticker. Zufällig habe ich nun bemerkt, dass dieses Script sich im Speicherverbrauch im IE anders verhält als bei Opera oder gar bei Firefox. Während beim IE mit Aufruf der Seite der Speicherverbrauch mit einem Mal etwas ansteigt und dann konstant bleibt, erhöht er sich bei Opera und Firefox kontinuierlich bis zu einem bestimmtem Wert, um dann wieder auf den Ausgangswert abzufallen und danach wieder anzusteigen. Bei Opera hält sich das in Grenzen; liegt etwa im Bereich des IE. Aber Firefox schlägt gewaltig zu: hier wird Speicher ohne Ende „gefressen“ und erst wenn alles weg ist (und das gesamte System sich dadurch stark verlangsamt), wird freigegeben und das Spielchen geht erneut los.

Ich weiß nun nicht, ob das letztlich ein JavaScript-Problem ist oder ein Browserproblem (Einstellung? - womit ich dann im falschen Forum wäre), aber vieleicht hat jemand eine Idee?

Vielen Dank schon mal für Euere Antworten!

Gruß, Robi

Und hier auf alle Fälle mal das Script:

<!-- Begin
var myMainMessage=„Ticker-Text“
var speed=175;
var scrollingRegion=100;
var startPosition=0;
function mainTextScroller() {
var mainMessage=myMainMessage;
var tempLoc=(scrollingRegion*3/mainMessage.length)+1;
if (tempLoc<1) {tempLoc=1}
var counter;
for(counter=0;counter<=tempLoc;counter++)
mainMessage+=mainMessage;
document.mainForm.mainTextScroller.value=mainMessage.substring(startPosition,startPosition+scrollingRegion);
startPosition++;
if(startPosition>scrollingRegion) startPosition=0;
setTimeout(„mainTextScroller()“,speed); }
// End -->

.
.
.

Hi Robi!

Der Firefox hat immer recht :smile: Es ist nicht zu empfehlen, rekursiv in einer Funktion dieselbe Funktion nochmals als Timeout zu setzen. genau dafür gibt es setInterval. Weiters würde ich nicht einem Datenfeld den gleichen Namen geben wie einer JS-Funktion, das ist verwirrend. Strings aneinanderzuhängen mit += macht man nicht, dazu gibt es die Funktion concat(). Diese Zeile ergab beim ersten Test sofort einen „Out of memory“-Fehler. Der optimale Wert für Scrollingregion ist die Länge des Ticker-Texts, anstatt einer Konstante.

var myMainMessage="Ticker-Text"
var speed=175;
var scrollingRegion=myMainMessage.length;
var startPosition=0;
function mainTextScroller() {
 var mainMessage=myMainMessage;
 var tempLoc=(scrollingRegion\*3/mainMessage.length)+1;
 if (tempLoc\<1) {
 tempLoc=1
 }
 var counter;
 for(counter=0;counter\<=tempLoc;counter++)
 mainMessage.concat(mainMessage);
 document.mainForm.scrollText.value=mainMessage.substring(startPosition,startPosition+scrollingRegion);
 startPosition++;
 if(startPosition\>scrollingRegion) startPosition=0;
}
setInterval("mainTextScroller()",speed);

Gruß,
Rudy

Danke!
Hallo Rudy,

learning by doing ist meine Devise, dadurch bin ich, was JavaScript, PHP, HTML und CSS betrifft, schon ganz schön weit gekommen für mein Alter. Aber bei manchen Dingen da fehlt dann halt einfach das Hintergrundwissen, da nutzt es nix, wenn du in -zig schlauen Büchern suchst weil du gar nicht weißt, wonach du suchen sollst.

Also nochmals vielen Dank für Deinen Tipp!

Gruß, Robi