Jay: AJAX - Speicherleck

Schön guten Tag,

ich bastel z.Z. an einem Ajax-Chat. Es funktioniert auch alles wie gewollt. Problem ist aber, das der Speicherverbrauch des Browsers immerzu steigt!

Mein XmlHttpRequestObjekt öffnet aller 0,5 Sek eine Verbindung zu einer PHP-Datei, worin eine SQL-Abfrage ausgeführt wird. Ich könnte mir vorstellen, das es wohl daran liegt, das die Anfrage nicht schnell genug bearbeitet wird.

Gibt es da eine Lösung, den Speicher wieder frei zu geben? Oder das man die Verbindungen einschränken kann?

Danke,
Gruß Jay

  1. hi,

    ich bastel z.Z. an einem Ajax-Chat. Es funktioniert auch alles wie gewollt. Problem ist aber, das der Speicherverbrauch des Browsers immerzu steigt!

    Mein XmlHttpRequestObjekt öffnet aller 0,5 Sek eine Verbindung zu einer PHP-Datei, worin eine SQL-Abfrage ausgeführt wird.

    Diese Frenquenz erscheint reichlich däml^Wungünstig.

    Ich könnte mir vorstellen, das es wohl daran liegt, das die Anfrage nicht schnell genug bearbeitet wird.

    Gibt es da eine Lösung, den Speicher wieder frei zu geben? Oder das man die Verbindungen einschränken kann?

    Erhöhe zunächst die Frequenz, auf ein halbwegs vernünftiges Maß.

    Und dann recycle die XMLHttpRequest-Objekte, anstatt immer wieder neue anzulegen (Vermutung).
    Ich würde sagen, für das PULLing kommst du sogar mit einem aus.
    Bereits weitere Abfragen zu starten, noch bevor zu der ersten eine Rückmeldung eintrifft, erscheint mir unsinnig.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Mein XmlHttpRequestObjekt öffnet aller 0,5 Sek eine Verbindung zu

      einer PHP-Datei, worin eine SQL-Abfrage ausgeführt wird. Ich könnte mir vorstellen, das es wohl daran liegt, das die Anfrage nicht schnell genug bearbeitet wird.

      Mit 0,5 Sek. gibst du der Internet-Verbindung kaum eine Chance. Schließlich muss...
      * die Verbindung aufgebaut werden
      * Anfrage gesendet
      * Anfrage vom Server bearbeiten
      * Ergebnis zurücksenden werden.

      Ich würde dir empfehlen den Zyklus auf mind. 1,5 Sek. zu erhöhen.

      Gibt es da eine Lösung, den Speicher wieder frei zu geben? Oder das man die Verbindungen einschränken kann?

      Wenn du eine Anfrage per XmlHttpRequest sendest, dann wird diese im Hintergrund vom Browser verwaltet. Je mehr Anfrage, desto größer der Verwaltungsaufwand deswegen auch der Speicherverbrauch.

      IDEE:
      Eine Anfrage darf mit "send" nur gesendet werden, wenn du von der vorherigen Anfrage schon eine Antwort bekommen hast.

      Erstelle eine Varibale: z.B.: var busy = false;
      Sendest du nun eine Anfrage überprüft diese, ob busy=false, wenn ja setzt du busy = true und sendest die Anfrage.

      wenn du per onreadystatechange das Ergebnis bekommst, setzt du busy = false

      Gruß, Notschko

  2. Hallo,

    Gibt es da eine Lösung, den Speicher wieder frei zu geben? Oder das man die Verbindungen einschränken kann?

    Du könntest zum einen natürlich auf das "A" von AJAX verzichten.
    ;)

    Zum anderen könntest Du den Timeout für die AJAX-Requests heruntersetzen.
    Und grundsätzlich würde ich die Requests nicht einfach so automatisch rausfeuern, sondern erst einmal schauen, wie der aktuelle Status ist (Was für Requests laufen sonst noch? Sind andere noch laufende Requests überflüssig geworden?).

    In 0,5 Sekunden ist nun mal kein Server-Request abgearbeitet. Und so, wie Du es beschreibst, entsteht gewissermaßen ein Request-Stau in Deiner Anwendung, da Du immer mehr Request-Objekte erzeugst - solange, bis der Browser bzw. der Rechner in die Knie geht.

    Das kann ich jetzt nicht beweisen, klingt aber für mich stimmig.

    Und sonst - siehe http://forum.de.selfhtml.org/archiv/2007/3/t147872/.

    So long,
    Mr. Horse

    --
    No, Sir, I don't like it.