[PHP5] Seite sehr langsam

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

  • [PHP5] Seite sehr langsam

    Hallo,


    wie fast immer wenn ich hier poste habe ich mal wieder ein Problem zu dem ich keine Hilfe gefunden habe

    Ich habe eine statische HTML-Seite mit ein paar PHP Elementen "aufgepeppt". Es werden aus 3 csv Dateien (Diese Dateien werden von einer Datenbank erstellt und ich muß mich mit dem Format abfinden wie es ist...) Werte mit der Funktion fgetcsv() gelesen. Dazu kommen eine Datumsvalidierung und diverse Array / Formatfunktionen.

    Jetzt ist es leider so, daß die Seite ca. 5 Sekunden braucht bis sie fertig aufgebaut ist. Und dies auf meinem lokalen Pentium mit 2 GHz und 512 MB RAM. Als OS läuft Win2000 + Apache2 + PHP5.
    5 Sekunden klingen nicht nach viel, aber nach aktuellen Umfragen wird ein Durchschnittsuser bereits nach ca 3 Sekunden nervös und fragt sich ob der Computer abgestürzt ist. Ergo, so kann ich das meinem Chef nicht abgeben...

    Kann mir jemand Tips geben wo die Leistungsbremsen bei PHP liegen?
    - Arrays?
    - Stringverarbeitung?
    - Lesen aus csv Dateien?
    - Datumsfunktionen?
    - etc?


    Vielen Dank im Voraus,


    KaptinKaos



    P.S.: Den PHP-Teil des Sourcecodes versende ich auf Nachfrage per Mail

  • #2
    Re: [PHP5] Seite sehr langsam

    Original geschrieben von KaptinKaos
    Kann mir jemand Tips geben wo die Leistungsbremsen bei PHP liegen?
    Vielleicht ja gar nicht bei PHP sondern bei dir?

    - Arrays?
    - Stringverarbeitung?
    - Lesen aus csv Dateien?
    - Datumsfunktionen?
    - etc?
    Große?
    Lange?
    Viele?
    Verschachtelt?
    In Schleifen?

    Vielen Dank im Voraus
    Gerne

    KaptinKaos
    mrhappiness



    P.S.: Den PHP-Teil des Sourcecodes versende ich auf Nachfrage per Mail
    P.S.: Effektivere Hilfe versende ich auf Bezahlung hin per Mail...

    OffTopic:
    Leute, die hie rlesen und antworten, sind normalerweise gewillt in ihrer Freizeit zu helfen, bzw. es zu versuchen.
    Meinst du, sie haben dann noch große Lust zusätzlich zum Lesen hier noch Mails abzurufen?
    Vor allem, da du über die Mail-Funktion des Forums keine Anhänge versenden kannst, sie dir also eine funktionierende Mailadresse geben müssten?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Re: Re: [PHP5] Seite sehr langsam

      Original geschrieben von mrhappiness
      OffTopic:
      Leute, die hie rlesen und antworten, sind normalerweise gewillt in ihrer Freizeit zu helfen, bzw. es zu versuchen.
      Meinst du, sie haben dann noch große Lust zusätzlich zum Lesen hier noch Mails abzurufen?
      Vor allem, da du über die Mail-Funktion des Forums keine Anhänge versenden kannst, sie dir also eine funktionierende Mailadresse geben müssten?
      Ich wollte hier einfach keinen ellenlangen Quelltext posten, da es
      A den Post sehr lang und unübersichtlich machen würde und
      B die meisten Leute eh nicht in den Sourcecode schauen...

      Da ich aber gerade den Punkt "Datei anhängen:" gesehen habe probiere ich mein Glück mal mit dem aus.


      Original geschrieben von mrhappiness Vielleicht ja gar nicht bei PHP sondern bei dir?
      Das kann ich nicht ausschliessen. Mir ist diese ganze Webprogrammierung eh etwas suspekt wo Variablen keinen festen Typ haben und man dort einfach alles ablegen kann... Ich werfe da lieber mit spitzen Pointern um mich wie ich das bei C gelernt habe.


      Grüße,


      KaptinKaos
      Angehängte Dateien

      Kommentar


      • #4
        Erinnert mich an nen Thread von vor ein paar Monaten - da PHP ebenfalls furchtbar langsam und die Kombi aus OS und PHP-Version glaub ich war ähnlich oder gleich...
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Na du bist mindestens mitschuldig an der miesen Performance!

          Warum home.html?
          Und dann nur mal exemplarisch ein Auszug aus deinem Code (gekürzt):
          PHP-Code:
          function get_longest_line($filename) {
              
          $byte_counter 0;
              
          $max 0;
              
          $fr fopen ($filename"r");
              
          $str fread ($frfilesize($filename));
              
          fclose ($fr);
              for (
          $i 0$i strlen($str); $i++) {
                  
          // ...
              
          }
              return 
          $max;
          }

          // ...
          $fr fopen(USER_FILE"r");
          if (
          $fr != NULL) {
              while (
          $line_arr fgetcsv($frget_longest_line(USER_FILE), ",")) {
                  foreach(
          $line_arr as $row => $value) { 
          Wie oft liest du mit diesem Code die Datei USER_FILE? Machst du das in C auch so?
          Zuletzt geändert von onemorenerd; 19.10.2005, 12:07.

          Kommentar


          • #6
            Original geschrieben von Quetschi
            Erinnert mich an nen Thread von vor ein paar Monaten - da PHP ebenfalls furchtbar langsam und die Kombi aus OS und PHP-Version glaub ich war ähnlich oder gleich...
            Das war es!! Ich habe die Seite jetzt, zu Testzwecken, auf den finalen Webserver gestellt und schwups, es geht alles einwandfrei.

            Neue Config:
            VM-Ware xy anstelle von keiner VM
            Windows 2003 Server anstelle von Windows 2000
            Apache 2
            PHP 5
            Intel 2.20 GHz anstelle von Intel 2.00 GHz
            512 MB RAM

            Eigentlich hätte ich gedacht, die VM-Ware macht die Seite eher noch langsamer, aber es geht viel besser! Komme noch nicht mal mehr zum Sekundenzählen...


            @onemorenerd:
            Nein, das mache ich in C eigentlich nicht so. Liegt wohl daran, daß ich mich bei C mehr auf die Logik konzentrieren kann weil ich nicht so damit beschäftigt bin Funktionen zu finden die meinen Bedürfnissen entsprechen.
            Speicher jetzt die Länge vor der Schleife in einer Variablen. Bei dem alten System hat es aber keine Verbesserung gebracht und bei dem neuen System ebenfalls keine. Hätte mich aber auch sehr gewundert bei Dateien mit 3 Zeilen Inhalt. Wenn es dann scharf geschaltet wird und die Dateien größer werden könnten dadurch aber wohl Geschwindigleitseinbußen entstehen. Wobei das aber bei der heutigen Rechenpower eines normalen Home PCs trotzdem nicht wirklich ins Gewicht fallen sollte.

            Original geschrieben von onemorenerd
            Warum home.html?
            Ganz einfach, die Seite gab es schon seit mehreren Jahren und mir wurde die ruhmvolle Aufgabe zugeteilt ("Mach das doch grad mal schnell zwischendurch.") sie so umzustellen, daß News etc direkt aus einer Datenbank dynamisch eingebunden werden. Das ganze natürlich ohne etwas an dem Rest der Seite zu ändern...



            Grüße,


            KaptinKaos

            Kommentar


            • #7
              Du kannst dir die Funktion get_longest_line() komplett sparen.

              Kommentar


              • #8
                Original geschrieben von http://php.speedbone.de/manual/de/function.fgetcsv.php

                array fgetcsv ( resource handle, int length [, string delimiter [, string enclosure]] )
                ...
                Length muss größer sein als die längste in der CSV-Datei vorhandene Zeile (um das Erkennen von EndOfLine (Ende der Zeile) Zeichen zu ermöglichen).
                ...
                Und was gebe ich der Funktion fgetcsv dann als 2. Parameter mit? Um keine bösen Überraschungen bei überlangen Zeilen zu erleben halte ich es für ganz sinnvoll da keinen festen Wert zu übergeben...
                Ich lasse mich aber gerne jederzeit eines besseren belehren.


                Grüße,


                KaptinKaos

                Kommentar


                • #9
                  Üblicherweise wird dort ein vielfaches von 1024 eingesetzt - z.B. 4096.
                  Manchmal auch filesize(), denn keine Zeile kann länger sein als die Datei an sich. Das aber nur, wenn sicher ist, dass die Datei nicht zu groß wird.

                  Das kann man alles auf der von dir verlinkten Seite lesen. Weiterhin auch dies: http://php.net/fgetcsv#39626

                  Kommentar


                  • #10
                    Original geschrieben von onemorenerd
                    Üblicherweise wird dort ein vielfaches von 1024 eingesetzt - z.B. 4096.
                    Welche Nachteile würde es eigentlich haben, wenn ich da z. B. 2147483647 (Größter möglicher Wert eines signed Int) als Wert einsetzen würde?

                    Original geschrieben von onemorenerd
                    Weiterhin auch dies: http://php.net/fgetcsv#39626
                    Danke für den Tip, funktioniert prima!


                    Hat aber alles nichts bei der Performance auf dem Win2000 Rechner geändert...


                    Schöne Grüße,


                    KaptinKaos

                    Kommentar


                    • #11
                      Original geschrieben von KaptinKaos
                      Welche Nachteile würde es eigentlich haben, wenn ich da z. B. 2147483647 (Größter möglicher Wert eines signed Int) als Wert einsetzen würde?
                      Du würdest den Interpreter anweisen, einen 2GB großen Puffer/Speicherbereich vom OS zu fordern.

                      Nachteile: Das allozieren, verwalten (wg. Swapping) und wieder freigeben wäre sehr aufwendig/teuer.
                      Wenn du wirklich eine CSV mit einer 2GB langen Zeile hättest, (hättest du andere Probleme und) würde das Lesen/Schreiben des Puffers ebenfalls verdammt teuer.
                      Bei normalen CSV's wäre der Puffer nur minimal belegt und somit völlige Verschwendung.

                      Die Idee ist also Quatsch. Man nimmt 4096, weil CSV-Zeilen kaum länger sind.
                      Theoretisch ist man mit filesize() auf der sicheren Seite, denn eine Zeile kann nicht länger sein als die gesamte Datei.

                      Kommentar

                      Lädt...
                      X