mijane Blog

ein paar interessante Sachen gibt es immer

20 Tips für schnelleren PHP Code

Geschrieben von Peter Rother • Dienstag, 17. Februar 2009 • Kategorie: Better Code

Heute habe ich für euch ein paar Tips wie ihr euren PHP Code ein wenig schneller und effizienter gestalten könnt. Ich hoffe mal, dass für jeden der ein oder andere Tip dabei ist.

  1. Falls eine Methode als static deklariert werden kann, sollte dies auch getan werden. Dies erhöht die Geschwindigkeit um das 4fache.
  2. echo() ist schneller als print()
  3. Sollten Variablen, Arrays oder Objekte nicht mehr benötigt werden, zerstört sie mit unset().
  4. Meidet magische Funktionen wie __get(), __set() und __autoload().
  5. require_once() ist sehr kostspielig.
  6. Benutzt für include() und require() den vollständigen Pfad.
  7. Benötigt ihr die Zeit an der ein Script gestartet ist, benutzt $_SERVER[’REQUEST_TIME’] anstelle von time().
  8. str_replace() ist schneller als preg_replace().
  9. Es ist besser Switch Statemantes, anstatt große if else Blöcke zu verwenden.
  10. Das Unterdrücken von Fehlern mit @ ist sehr teuer.
  11. Schaltet die Apache mod_deflate Extension ein.
  12. Schließt die Datenbank Verbindungen wenn diese nicht mehr benötigt werden.
  13. Benutzt, falls möglich, keine Funktionen in Schleifen, da diese Funktionen jedes mal ausgeführt werden.
  14. Das Hochzählen einer globalen Variablen ist 2mal langsamer als bei einer Lokalen Variable.
  15. Das Hochzählen einer Objekt Eigenschaft ist 3mal langsamer als bei einer Lokalen Variable.
  16. Das Hochzählen einer nicht initialisierten Variablen ist 9 -10mal langsamer als bei einer initalisierten Variablen.
  17. Probiert so viel wie möglich zu cachen. Benutzt hierfür z.B. den Memcache oder eine OP Code Cache. Bei einem OP Code Cache muss das PHP File nicht jedes mal neu kompiliert werden.
  18. Es muss nicht jede Datenstruktur als Objekt abgebildet werden, ein Array kann hier manchmal genau so helfen.
  19. Benutzt, falls möglich, das Apache Modul mod_gzip. Das Modul komprimiert die Daten um bis zu 80%.
  20. Benutzt eine Profiler wie XDebug für eure Scripte, hier könnt ihr schnell Funktionen finden die zu langsam laufen.
Tags für diesen Artikel: ,
Tweet This!Tweet This!

0 Trackbacks

  1. Keine Trackbacks

4 Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)
  1. Quellen/Belege wären ganz interessant. ;-)

    Außerdem sollte man immer im Hinterkopf haben, dass Lesbarkeit immer vor Performance gehen muss. Dahingehend halte ich zum Beispiel nichts von riesigen Switch/Case-Blöcken. Sollte man sie Dennoch benutzen, dann gilt die Devise: Wahrscheinliche Fälle nach oben, unwahrscheinliche nach unten.

    Was übrigens auch verdammt teuer (und unsauber) ist: Array-Indizes mit Gänsefüßchen: $array["element"]. Wird nur noch getoppt, wenn man gar keine Delimiter verwendet: $array[element]!
  2. Quellen habe ich leider auch nicht mehr. Das sind alles so Punkte die zwischendurch beim stöbern aufgefallen sind. Aber du hast recht, dass nächste mal werde ich mir die Quellen mit notieren.
  3. Hi,
    bin gerade auf die Seite gestoßen und will erstmal ein Lob loswerden, hab doch ein paar interessante Sachen gefunden.
    Zu deiner obigen Liste und zu dem Kommentar von unset hab ich allerdings doch noch ein paar Fragen, hoffe der Artikel ist noch nicht zu alt, das die auch jmd. mitbekommt.

    Bin noch nicht lange im Thema PHP drin, daher schonmal ein 'Tut mir Leid' vornweg, wenn einige Anfängerfragen dabei sind ;-)

    zu 3. Sind damit generell alle Variablen gemeint? Angenommen ich durchlaufe eine for Schleife und habe dafür den Index $i, sollte ich diesen am Ende der Schleife zerstören? Was genau macht PHP langsamer wenn ich ihn nicht zerstöre, belegt die Variable nicht nur den Speicher? Wie siehts bei Beendigung des Skriptes aus? Werden dann alle Variablen automatisch zerstört?

    zu 6. Kann mir grad kaum vorstellen wie durch den relativen Pfad die Geschwindigkeit nach unten gehen soll?! Bringt das tatsächlich signifikante Unterschiede?

    zu 12. Baue die Verbindung am Anfang des Skriptes auf, wird dann auch direkt gebraucht, und zwischendurch auch immer wieder und erst am Ende des Skriptes schließe ich sie (wobei ich nicht weiß ob sie nicht auch automatisch nach Ablauf des Skriptes geschlossen würde). Macht es Sinn die zwischendurch zu schließen/öffnen, nur weil dazwichen mal ne Schleife etc. pp. steht?

    bzgl. dem Kommentar von unset:
    Die Verwendung von Delimitern in Arrays, wie genau ist das zu verstehen. Benutze eigentlich nur numerische Indizes, brauch ich die da auch? Also nicht $array[0] = 1 sondern $array['0'] = 1 ?
  4. Hi Sebastian,

    erstmal sorry das ich deinen Beitrag erst jetzt frei schalte, ich war aber die letzten Tage Privat nicht vor dem Rechner. Da ich gerade im Büro sitze, und hier noch einiges zu tun habe, werde ich dir die Fragen gerne heute Abend beantworten.

Kommentar schreiben


Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA


Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!