Langsames AJAX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Langsames AJAX

    Hallo ihr,

    ich baue derzeit eine ziemlich AJAX-intensive Applikation und dabei fällt mir auf, dass dieselbigen verdammt lange brauchen, bis sie bearbeitet werden.

    Ich vermute, dass es ein Problem mit dem Long-Polling gibt, welches ich ebenfalls benötigt.

    Es sieht folgendermaßen aus;

    - Das Long-Polling läuft durchgehend (soll ja auch so sein), das PHP-Skript welches diese Requests entgegennimmt, ist auf 20 Sekunden begrenzt, dann wird ein leeres Result zurückgegeben und das Polling beginnt erneut
    - Die normalen AJAX-Requests sind so, wie man sie kennt. Z. B. bei einem Button-Klick ein Request mit ein paar Daten, eine schnelle Antwort, und fertig.

    Wenn ich das Button-Skript alleine laufen lasse braucht es ugf. 1 Sekunde von Senden bis zum Empfang der Antwort. Wenn nebenher das Long Polling läuft, wird die Antwort immer erst dann gesendet, wenn auch die Antwort des Long Pollings gesendet wird.

    In dem angehängten Screenshot wird das vielleicht etwas klarer. "1" ist das Long Polling und "join" der Button-AJAX-Request. Wie man sieht, wird dessen Antwort gleichzeitig mit der des Pollings gesendet, obwohl er schon viel früher abgesendet wurde.

    Jetzt ist die Frage: Warum? Und wie kann ich das beheben? Ich möchte ungern auf Long-Polling verzichten, da wiederholte Reqeusts mir einfach zuviel Last verursachen. Und eine Alternative mit Server-Push kommt aufgrund meines eher begrenzten Webspace-Angebots auch nicht in Frage...
    Angehängte Dateien
    This is what happens when an unstoppable force meets an immovable object.

  • #2
    Hallo,

    testest du das nur lokal oder ist das auch so, wenn du die Seite hochlädst?

    Es könnte unter Umständen auch daran liegen, dass dein Apache zu ressourcenschonend konfiguriert ist und deswegen nicht genug Kindprozesse forkt. Wenn MySQL noch dazu kommt, kann das ebenfalls durch die Konfiguration die Geschwindigkeit paralleler Zugriffe ausbremsen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Vermutlich nutzt du Sessions...
      Das ist nicht schlimm, aber beachte, das dir das Sessionlocking einen Streich spielen kann.

      Siehe:
      PHP: session_write_close - Manual
      (ersetze Frames durch Ajax)
      Wir werden alle sterben

      Kommentar


      • #4
        Oh ja, das kann auch sein. Auch wenn combie sagt, das wäre nicht schlimm, bin ich der Meinung, dass Sessions in einer AJAX-Umgebung komplett unnötig sind. Mein Credo: Wenn schon AJAX, dann RESTful.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Dann sind wir unterschiedlicher Meinung.
          Aber auch das ist nicht schlimm.

          Trotzdem: Das ist ein Locking Problem.
          (zumindest sagt meine Kristallkugel bisher nicht mehr dazu)
          Zuletzt geändert von combie; 04.08.2011, 00:44.
          Wir werden alle sterben

          Kommentar


          • #6
            Wow, soviele Antworten über Nacht

            Ich hab also ein bisschen rumgespielt und es scheint tatsächlich am Session-Locking zu liegen. Als Quick-Fix habe ich in den PollController ganz am Anfang jedes Reqeusts ein

            PHP-Code:
            session_write_close(); 
            Gesetzt. Jetzt werden die normalen AJAX-Reqeusts problemlos und schnell abgearbeitet.

            Ich danke vielmals für eure Hilfe. Der Hinweis auf REST ist ebenfalls sehr interessant! Wusste garnicht, dass es dafür sogar schon eine solche ausgearbeitete Arbeit gibt. Ich versuche das selbst schon seit Jahren so zu machen, endlich habe ich auch einen Namen und Ressourcen dazu

            Ich denke ich werde, um die Performance noch zu steigern, eine separate Domain anlegen, die sich nur um XHR kümmert... da kann ich dann auch problemlos Session komplett deaktivieren und nur die nötigsten Komponenten laden, die zum Bearbeiten der Requests nötig sind... Aber das dauert noch ein bisschen...

            Wenn ihr noch nützliche Hinweise auf weitere Literatur zu dem Thema habt, bitte teilt sie mir mit! Alles was man irgendwie nutzen kann, um die Performance von XHRs zu steigern ist da besonders interessant
            This is what happens when an unstoppable force meets an immovable object.

            Kommentar


            • #7
              Zitat von ApoY2k Beitrag anzeigen
              Ich denke ich werde, um die Performance noch zu steigern, eine separate Domain anlegen, die sich nur um XHR kümmert...
              Dann empfehle ich dir aber, dich vorher mal zu informieren, was die Same Origin Policy ist ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Zitat von wahsaga Beitrag anzeigen
                Dann empfehle ich dir aber, dich vorher mal zu informieren, was die Same Origin Policy ist ...
                Stimmt, hatte vergessen, dass die Domain ja exakt gematcht werden muss... Na gut, in dem Fall wird es eben eine separate Controller-Datei auf der selben Domain..

                host.de/index.php/some/site - für User-Requests
                host.de/xhr.php/do/something - für XHR

                Das sollte doch klappen
                Zuletzt geändert von ApoY2k; 04.08.2011, 14:46.
                This is what happens when an unstoppable force meets an immovable object.

                Kommentar

                Lädt...
                X