hi Leute versuche mich etwas in javascript einzuarbeiten.
Ich versuche ein neues Fenster, mit mehren Tabs auf zumachen.
Der Code läuft so, aber da die Tabs zu schnell aufgehen, ist die Anfrage
an den Server "zu groß(viel)". Es kommt zu lade Fehlern, das zeigt sich
das teile des Frames nicht richtig geladen werden. Refreshe ich die
Seiten von Hand, wird wieder alles richtig angezeigt.
ist setTimeout nicht richtig?
Der Befehl 'form.submit()' sollte nach 0,3 Sekunden ausgeführt werden!
was für Möglichkeiten für ein 'sleep' gibt es denn noch?
Stephan
Stephan schrieb:> ist setTimeout nicht richtig?> Der Befehl 'form.submit()' sollte nach 0,3 Sekunden ausgeführt werden!> was für Möglichkeiten für ein 'sleep' gibt es denn noch?
Doch, ist schon richtig. Aber mit "()" wird das Statement sofort
ausgeführt. Du möchtest der Funktion "setTimeout" die Funktion nur
übergeben. Also entweder (ungetestet):
Danke für die Info, aber beides geht leider nicht!
Liegt das vielleicht noch an firefox?
ich habe auch schon sowas getestet, aber es scheint nur 1mal zu
funktionieren!
Ich habe die Zeit mal auf 3000 gesetzt und es scheint so, als wird bei
allen versionen die Tabs auf einmal geöffnet!
Bei meiner Version mit 'Date' wir ein mal eine Verzögerung erzeugt!
Stephan
Poste doch einfach mal den aktuellen Code, und versuch es erst mal mit
einem Minimalbeispiel!
Du platzierst z.B. DIVERSER Variablen im Globalen Scope --> Nix gut.
Ansonsten musst du den Timeout natürlich zusammen mit deinem
Schleifenzähler erhöhen, das Timeout wartet nicht!
(Und warten wäre in JS sowieso gaaaanz böse, da es nur einen Thread
gibt!)
Stephan schrieb:> Der Code läuft so, aber da die Tabs zu schnell aufgehen, ist die Anfrage> an den Server "zu groß(viel)". Es kommt zu lade Fehlern, das zeigt sich> das teile des Frames nicht richtig geladen werden.
Dann ist das kein Server sondern Mist... Hier sollte man als erstes
ansetzen.
noch eine Sache, früher hatte ich alle Links mit "window.open"
aufgemacht, was aber bei meinem Firefox V30.0 nach einigen malen zum
Absturz führte.
Jetzt mit der Tab Lösung sah es sehr gut aus, aber jetzt nach etlichen
probieren frisst der FF sich wieder voll.
Hab ich hier ein Memory Leak drin?
Kaltstart FF ~450MB RAM
Nach öffnen einiger Fenster mit etlichen Tabs ~1GB
Stephan
Zuerst einmal ist mir nicht bekannt, dass es den Befehl "sleep()" in JS
gibt. Bist du dir sicher, dass das so passt?
Dann sollte dir bewusst sein, dass deine Variable "form" bei jedem
Durchlauf überschrieben wird. Schöner wäre es, wenn du den gesamten
else-Zweig in ein setTimeout schreiben würdest. Vielleicht behebt das
dein Problem schon.
Ansonsten lass das mit dem Fenster öffnen einmal und gib nur Alerts oder
Konsolenmeldungen aus, das ist einfacher zu testen.
Progger schrieb:> Zuerst einmal ist mir nicht bekannt, dass es den Befehl "sleep()" in JS> gibt. Bist du dir sicher, dass das so passt?
Ja, habe ich am Anfang als Funktion erstellt
> Dann sollte dir bewusst sein, dass deine Variable "form" bei jedem> Durchlauf überschrieben wird.
Ja und? Form ist nur ein Pointer auf das neu erstellte Objekt.
und mit "myWindow.document.body.appendChild(form);" wir das objekt in
einen Container gelegt. Ist hier dann nicht der Container für die
Verwaltung zuständig? wie in C++?
das andere muss ich mal schauen wie man das macht.
Danke.
Stephan
Stephan schrieb:> So mit 1.5GB wars für den FF zu viel und er ist abgestürzt!!!> Da muss doch noch ein Memory Fehler im Programm sein!
Eher unwahrseinlich, javascript sollte garbage collection unterstützen,
und endlose rekursionen abbrechen. Solange man sich keine arrays mit
sehrgrossen unterarrays mit zufälligem Inhalt anlegt, ist das nicht
möglich, und selbst dann dürfte firefox nicht abstürzen! Dass muss ein
fehler von firevox sein.
> function sleep(delay) {> var start = new Date().getTime();> var EndTime= start + delay;> var NowTime;> do{> NowTime= new Date().getTime();> }while (NowTime < EndTime);> }
Tue soetwas Niemals!!! Schleifen müssen wenn immer möglich vermieden
werden, denn solange diese lauft passiert nichts!!! Nichteinmal das
scrollen oder das nächste frame anzeigen, alles wird Blockiert!!!
Versuche statdessen mit setTimeout zu arbeiten! Verwende
objektorientierung ( klassen ), dass macht alles einfacher!
Beispiel einer classe x mit asynchronem for-schleifenersatz, getestet:
Wow danke für die Infos.
Aber bei Klassen bin ich noch nicht angekommen und für heute reicht es.
Danke.
Ich werde mir das mal morgen ansehen.
Das mein sleep nicht so toll ist, hatte ich schon im Netz gefunden, war
aber für mich als C, C++ Programmierer aus dem stehgreif zu
programmieren.
>Eher unwahrseinlich, javascript sollte garbage collection unterstützen,>und endlose rekursionen abbrechen. Solange man sich keine arrays mit>sehrgrossen unterarrays mit zufälligem Inhalt anlegt, ist das nicht>möglich, und selbst dann dürfte firefox nicht abstürzen! Dass muss ein>fehler von firevox sein.
Das kann ich nicht beurteilen, ist aber reproduzierbar.
Nimm oben die if Abfrage raus und ersetze sie nur durch die window.open
Zeile und mach 4x oder so 30 Seiten auf, dann ist ende!!!
Gute Nacht.
Stephan schrieb:> und mach 4x oder so 30 Seiten auf, dann ist ende!!!
Und du meinst nicht das der FF vielleicht nicht unbedingt darauf
ausgelegt ist mehr als 100 Fenster in kürzester Zeit zu öffnen?
Und wenn bei dir FF 450MB OHNE gleich zu anfang anzeigt hast du
vielleicht etwas viele Plugins aktiviert...
Und ob window.open oder Forms das richtige sind hängt doch davon ab was
du willst, benötigst du überhaupt das was der Server zurückliefert in
einem extra Frame?
Daniel A. schrieb:> Beispiel einer classe x mit asynchronem for-schleifenersatz
Noch verworrener ging es aber nicht oder? ;-P
//Hier kannst du dann anstelle des folgenden dein Form erzeugen und Absenden...
16
document.body.innerHTML='action'+i;
17
});
http://jsfiddle.net/9J9uG/
Ich würde aber trotzdem überlegen, ob du nicht mit AJAX Aufrufen besser
bedient bist. ggf. interesante Rückgaben kannst du dann ganz einfach in
deiner aktuellen Seite einfügen ohne hunderte Tabs zu öffnen.