Mister X: PHP/MySQL: Verbindungsgeschwindigkeiten im Frameset

System: Ubuntu
Apache-Version: 2.2.14
PHP-Version: 5.3.2
MySQL-Version: 5.1.41

  • genutzte Engine: MyISAM

-----------

Hallo,

ich habe momentan ein Problem mit den Ladezeiten von Scripten. Und zwar geht es um ein Frameset, das ein Spiel darstellt. Über eine Karte kann man sich bewegen und das hat eine Aktualisierung von zwei anderen Seiten zur Folge.

Das Frameset beinhaltet im Code zuerst Seite A, dann Seite B und dann Seite C.

Jetzt das Kuriose:

Wenn ich Seite A allein lade, erhalte ich als Ladezeiten:
MySQL-Verbindung: 0.0031 s
Rest: 0.0278 s

Wenn ich das Frameset komplett neu aufrufe, erhalte ich die gleichen Zeiten.

Wenn ich nun aber über ein Script in Seite C die Seiten B und A (in genau dieser Reihenfolge) neu lade (per JS, location.href), erhalte ich diese Zeiten:
MySQL-Verbindung: 0.2151 s
Rest: 0.0292 s

Die Steigerung bei der MySQL-Verbindung liegt damit bei einem Faktor von etwa 69. Das ist definitiv nicht normal.

Ich habe schon ein paar Überlegungen angestellt: Da Seite A ganz oben im Frameset steht, wird sie vermutlich als erste ausgeführt und erhält auch den ersten Zugriff.
Über den JS-Reload wird die Seite A aber als letzte aufgerufen.
Könnte es sein, dass die Scripte sich gegenseitig stören? Dass die MySQL-Verbindung so stark verzögert wird, dass sie eine Fünftelsekunde benötigt?
Oder ist es wahrscheinlicher, dass die selbst geschrieben MySQL-Include-Datei nicht zu hoch frequentiert werden kann?

Ich stehe vor einem Rätsel. Hat jemand eine Idee?

Gruß und Dank,
Mister X

  1. Hi,

    Wenn ich nun aber über ein Script in Seite C die Seiten B und A (in genau dieser Reihenfolge) neu lade (per JS, location.href), erhalte ich diese Zeiten:
    MySQL-Verbindung: 0.2151 s
    Rest: 0.0292 s

    Wie genau hast du diese Zeiten gemessen?
    Insb. der Wert bzgl. der MySQL-Verbindung interessiert mich.

    Ich stehe vor einem Rätsel. Hat jemand eine Idee?

    Sessions im Spiel?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      ah, entschuldige. Das hatte ich vergessen zu schreiben.
      Ich habe die PHP-Funktion microtime() benutzt - einmal vor Aufruf der MySQL-Include-Datei und danach (sowie dann an anderen Stellen).
      Also serverseitig, nicht clientseitig.

      Sessions sind da, ja. Okay, zugegeben, die sind da auch mit drin, in der MySQL-Ladezeit ... hatte ich vernachlässigt. Ups, wie ich sehe, war das nicht gut. Neue Zeiten:

      Normaler Reload:
      Session: 0.00101399421692
      MySQL: 0.00226783752441

      JS-Reload:
      Session: 0.210947990417
      MySQL: 0.00138783454895

      Okay, damit wird klar: Es liegt nicht an der Datenbank, sondern an der Session. Darf die dann nicht zu hoch frequentiert sein?
      In der Session befinden sich eine ID und ein kurzer (max. 20 Zeichen) String.

      Gruß,
      Mister X

      1. Hi!

        Okay, damit wird klar: Es liegt nicht an der Datenbank, sondern an der Session. Darf die dann nicht zu hoch frequentiert sein?

        Das ist im PHP-Handbuch zum Thema Session zu lesen. Sie wird exklusiv geöffnet und alle weiteren Prozesse müssen warten, bis sie explizit oder implizit (am Scriptende) geschlossen wird.

        Lo!

        1. Hi,

          alles klar, werd ich mir ansehen. Danke für die Hilfe!

          Gruß,
          Mister X