Giovanni Rena: Was bremst Seiten aus

Hallo,

ich wollte mal wissen was konkret Seiten ausbremst

  • z. B. das Abspeichern von Bildern in Datenbanken
  • das ständige (sehr sehr häufige) Aufrufen von Funktionen
    hat jemand noch so ein paar Tipps?

LG Giovanni

  1. Hi,
    unnötiger quelltext wie z.B. ellenlange Meta-Angaben unnötige   und  eben sonstiger unnötiger Quellcode.

    MfG

    1. Ja, ich hab eher speziellere Dinge gemeint, dass ne BMP-Datei länger braucht bis sie geladen ist als die selbe Datei in JPG-Format ist klar, auch unnötiger Quelltext macht die Seite "unnötig langsam"! Versteht sich von selbst.

      Braucht z. B. eine DB-Connection lange? Ich habe oft Funktionen wie z. B. GetNewMaxID($Tabelle, $Spalte) die die Verbindung zur DB herstellen, ne Abfrage machen und den Wert liefern, danach wird die Connection beendet.

      Oft ist es auch der Fall, dass eine Funktion, 5 andere solche Funktionen aufruf, d. h. es wird 5mal ne Connection zur DB hergestellt und geschlossen. Das braucht Zeit.

      Der Vorteil ist aber, ich kann diese Funktionen im ganzen Programm (Homepage) einsetzen da diese unabähngig sind.

      Gruß Giovanni

      1. Braucht z. B. eine DB-Connection lange? Ich habe oft Funktionen wie z. B. GetNewMaxID($Tabelle, $Spalte) die die Verbindung zur DB herstellen, ne

        Abfrage machen und den Wert liefern, danach wird die Connection beendet.

        Oft ist es auch der Fall, dass eine Funktion, 5 andere solche Funktionen aufruf, d. h. es wird 5mal ne Connection zur DB hergestellt und geschlossen. Das braucht Zeit.

        Der Vorteil ist aber, ich kann diese Funktionen im ganzen Programm (Homepage) einsetzen da diese unabähngig sind.

        Wieso machst du sowas?
        Einmal die Verbindung am Anfang des Scripts herstellen und am ende des Scripts beenden. Macht den Code wesentlich übersichtlicher, dadurch auch kürzer und natürlich schneller. Ausserdem kostet das Speicher.
        So kannst du auch alle funktionen auf der kompletten homepage nutzen.

        Sorry, aber sowas hab ich ja noch nie gehört ....

        BTW, es kann auch vorkommen das du an die grenze der Maximalen DB Verbindungen eines Prozesses kommst.

        MfG

        --

        ie:{ fl:( br:^ va:} ls:[ fo:| rl:? n4:# ss:) de:] js:| ch:] mo:| zu:}
        1. Okay, ich kanns ja mal probieren. Danke für den Tipp.

      2. Hi,

        Ja, ich hab eher speziellere Dinge gemeint, dass ne BMP-Datei länger braucht bis sie geladen ist als die selbe Datei in JPG-Format ist klar,

        Nein, eher umgekehrt.
        Wenn beide Dateien gleich groß sind (von der Menge her, nicht von der Breite und Höhe des Bildes) und mod_gzip eingeschaltet ist, ist die BMP-Datei schneller übertragen.

        auch unnötiger Quelltext macht die Seite "unnötig langsam"! Versteht sich von selbst.

        Nein, tut es nicht. Ähnlicher Grund wie oben: Wenn viel Redundanz drin ist und auch noch mit Muster, dann kann das so gut komprimiert werden, das es bei der Übertragung nicht mehr weiter auffällt.

        Die Komprimierung verbraucht zwar Rechenleistung, bei statischen Seiten läßt sich jedoch cachen.

        Braucht z. B. eine DB-Connection lange?

        Ja. Wenn Du nicht gerade mittels HTTP o.ä. Material von anderen Seiten holst, ist das die langsamste Stelle.

        Ich habe oft Funktionen wie z. B. GetNewMaxID($Tabelle, $Spalte) die die Verbindung zur DB herstellen, ne Abfrage machen und den Wert liefern, danach wird die Connection beendet.

        Versuche nach Möglichkeit zusammenzufassen und soviele Informationen wie möglich auf einmal rauszuziehen.

        Oft ist es auch der Fall, dass eine Funktion, 5 andere solche Funktionen aufruf, d. h. es wird 5mal ne Connection zur DB hergestellt und geschlossen. Das braucht Zeit.

        Ich kenne zwar Deine Gründe für dieses Vorgehen nicht, aber das hört sich wirklich so an, als könnte man da etwas zusammenfassen.

        Der Vorteil ist aber, ich kann diese Funktionen im ganzen Programm (Homepage) einsetzen da diese unabähngig sind.

        Tja, ist eben nix umsonst ;-)

        so short

        Christoph Zurnieden

        1. Danke für die ausführliche Antwort, werde das mit den Connections  mal ändern, was ja auch Senti schon vorgeschlagen hat.

          Wie schauts mit dem Befehl include aus. Ich hab auf meiner Homepage viele einezlne Seiten

          • Home
          • Content1
          • Content2
          • Content3
            ...

          der Inhalt für das Hauptfenster dieser Seiten wird jeweils aus einer
          window.php geladen.

          Der Inhalt für kleinere Nebenfenster wird aus der
          windows.php geladen.

          Ich inkludiere also am Anfang jeder Content.php diese zwei Dateien und rufe dann halt die nötigen Funktionen daraus ab. Könnte ich da auch noch was optimieren?

          1. Hi,

            Wie schauts mit dem Befehl include aus.
            Könnte ich da auch noch was optimieren?

            Die muß PHP vielleicht jedesmal von der Platte holen (es ist aber mittlerweile schon fast überall möglich zu cachen. Frag' mal Deinen Provider). Wenn Du also _immer_ beide Dateien benötigst, dann schmeiß beide zusammen, mach eine draus.
            Bringt aber im Gegensatz zu den Einsparungen bei den DB-Abfragen so gut wie nix. Da ist es meistens billiger noch eine Pizzabox in den Cluster zu klemmen, als stunden- oder gar tagelang irgendwas zu fummeln.

            Die drei Grundregeln beim Optimieren:
            1. Mach's nicht!
            2. (nur für Experten) Mach's noch nicht.
            3. Die Geschwindigkeit eines nicht funktionierenden Programmes ist irrelevant.

            CZs Theorem: die Kosten einer größeren Maschine sind umgekehrt proportional zu den Kosten eines optimierenden Programmierers.

            so short

            Christoph Zurnieden

            1. Hi,

              CZs Theorem: die Kosten einer größeren Maschine sind umgekehrt proportional zu den Kosten eines optimierenden Programmierers.

              und was soll man damit anfangen? die aussage dieses Theorems bedeutet,
              sofern ich mich richtig entsinne was umgekehrt proportional bedutet:

              • Je größer die Kosten für eine größere Maschine desto niediger die Kosten eines optimierenden Programmierers.
              • Je größer die Kosten eines optimierenden Programmierers desto niediger die Kosten für eine größere Maschine.

              Also mehr oder weniger garnix. Außer das man abwegen muss was für einen
              selebr die niedrigeren Kosten verursacht.

              MfG

              1. Hi,

                Außer das man abwegen muss was für einen
                selebr die niedrigeren Kosten verursacht.

                Gaaaanz genau, damit hast Du das Wesen einer vernünftigen Optimierung voll und ganz erfaßt.

                so short

                Christoph Zurnieden

    2. Hi Daniel,

      unnötiger quelltext wie z.B. ellenlange Meta-Angaben unnötige   und  eben sonstiger unnötiger Quellcode.

      Ich glaube das wollte Giovanni gar nicht mal so in erster Linie wissen - du redest hier von Sachen, die zum Clienten übertragen werden müssen, dabei ist es aber egal, ob diese von einem PHP Script ausgegeben werden oder eine statische HTML Seite sind. Ich glaube, Giovanni wollte mehr wissen, inwiefern PHP Code das Script auf dem Server verlangsamt.

      Da wären z.B.:

      • Bearbeiten von Bildern => Bilder sollten einmal beim Hochladen bearbeitet werden, nicht bei jedem Seitenaufruf neu
      • Massiges Senden von MySQL Queries => Oft lassen sich mehrere SQL Querys durch Joins oder ausgeklügelte Where Klauseln zusammen fassen
      • Manche Funktionen sich einfach langsamer als andere, die ähnliches leisten => z.B. die preg_* Funktionen sind recht langsam (weil so mächtig), kleinere Probleme lassen sich oft mit den str_* Funktionen lösen.

      Übrigens: PHP Kommentare schaden _nicht_ der Performance! ;-)

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.
  2. Moin!

    ich wollte mal wissen was konkret Seiten ausbremst

    Festplattenoperationen.

    Dazu zählen natürlich die von dir genannten

    • z. B. das Abspeichern von Bildern in Datenbanken

    sowie sonstige aufwendige Datenbankoperationen, sowie alles, was extrem viel RAM-Speicher benutzt (dann kommt es gerne zum Swapping auf Festplatte).

    Andererseits sind gewisse Dinge einfach nicht vermeidbar, Bilder beispielsweise müssen irgendwie auf der Festplatte liegen, der Geschwindigkeitsunterschied zwischen "Bild wird direkt vom Server ausgeliefert" und "Bild wird per Skript ausgeliefert" unterscheidet sich hinsichtlich des Aufwandes, die entsprechenden Bytes von der Festplatte lesen zu müssen, nicht. Um aber den Zugriff auf das Bild je nach Account regeln zu können, ist die Skriptmethode fast unabdingbar. Es hängt also jeweils vom gewünschten Einsatzzweck ab, wie Probleme gelöst werden.

    • das ständige (sehr sehr häufige) Aufrufen von Funktionen

    Das ist ziemlich ungefährlich. Natürlich benötigt der Aufruf einer Funktion einen gewissen zusätzlichen Aufwand für die Verwaltung lokaler Variablen, aber verglichen mit Festplattenoperationen ist das absolut vernachlässigbar.

    Abgesehen davon sind solche allgemeinen Aussagen nicht unbedingt wirklichkeitsnah auf einen konkreten Anwendungsfall beziehbar. Es ist im Zweifel immer zielführender, wenn eine konkrete Anwendung mit Performanceproblem einer konkreten Problemanalyse unterzogen wird und man die Lösungsansätze dann auch mit Benchmarks auf ihre Wirksamkeit untersucht, und nicht wild irgendwelche allgemeinen Theorien anwendet.

    • Sven Rautenberg
  3. Hi,

    • z. B. das Abspeichern von Bildern in Datenbanken

    Z.B. Bilder bestehen aus Binärdaten, also warum diese überhaupt in einer Datenbank speichern? Speichere besser nur Dateiverweise zu und Metainformationen über die Bilder in der DB.

    • das ständige (sehr sehr häufige) Aufrufen von Funktionen

    Z.B., aber manchmal nicht zu vermeiden.

    Verwende so viel wie möglich interne PHP-Funktionen statt das Rad neu zu erfinden. Ach ja: und erzeuge bitte keine HTML-Tabellenmonster... ;)

    MfG
    Danny

  4. Sup!

    Die Benutzung von PHP?

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Hi Bio,

      Die Benutzung von PHP?

      Hör auf PHP zu diskriminieren, du ... alter Perl-Freak? ;-)

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Dies hier ist ein öffentliches Forum - wer dir hier geholfen hat, hat dies vollkommen freiwillig und unter Aufopferung seiner Freizeit getan!
      1. Tag Dennis.

        du ... alter Perl-Freak? ;-)

        Hah, Schurke! Um Mitternacht, an der alten Eiche!

        Siech*SCNR*fred

        1. Hi Siechfred,

          du ... alter Perl-Freak? ;-)

          Hah, Schurke! Um Mitternacht, an der alten Eiche!

          Abgemacht


          Oder doch direkt „richtig”?

          Interessant, was man mit Google so alles findet

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.
          1. Hi,

            Abgemacht


            recht müig, auf eine Wand zu feiern, oder?
            Wenn, dann doch eher so: ;-)
               

            freundliche Grüße
            Ingo

          2. Hi Siechfred,

            Interessant, was man mit Google so alles findet

            Ich frage mich nur, was für Leute so etwas auf Dauer in ihrem Forum/Board aushalten...

            MfG, Dennis.

        2. Hi,

          Hah, Schurke! Um Mitternacht, an der alten Eiche!

          Wieder die arme Eiche... ;))

          mfg
          -WebViper-

          --
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
      2. Sup!

        Hör auf PHP zu diskriminieren, du ... alter Perl-Freak? ;-)

        Ich muss doch sehr bitten. Bestimmt ist ein Server mit PHP etwas langsamer als ein Server, der nur statische Seiten ausliefert.

        Gruesse,

        Bio

        --
        Never give up, never surrender!!!
        1. Hi Bio,

          Bestimmt ist ein Server mit PHP etwas langsamer als ein Server, der nur statische Seiten ausliefert.

          Ach ja, ich vergaß: Statische Seiten sind ja immer noch die coolsten - bzw. ... der Server bleibt dabei „cool” *g*

          *gr* Schon wieder ein „Format-Defizit” bekommen - ich sollte die Deaktivierung desselben wirklich mal standardmäßig zu sein.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          That's life - Es gibt im Leben[tm] keine Zurück-Taste. (Fabian Transchel)