Seite 1 von 2 12 Letzte
  1. #1
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.209
    Thanked 9.130 Times in 3.005 Posts
    Blog Entries
    5

    Standard [PHP] Performantes Entwickeln

    Performanter Code ist in PHP oft auch gleichzeitig sauberer Code.
    PHP ist sehr fehlertolerant. Das führt dazu, dass an sich invalider Code zwar richtig ausgeführt wird, durch die Fehlerkorrektur aber wesentlich inperformanter ist.

    Beispiel: Zugriff auf einen assoziativen Array

    Man deklariert einen assoziativen Array und will mit einzelnen Elementen des Arrays arbeiten (hier ausgeben).
    Korrekt würde das so funktionieren

    PHP-Code:
    $userinfo = array("username" => "peter");
    echo 
    $userinfo['username']; 
    Es geht aber auch anders:

    PHP-Code:
    $userinfo = array(username => peter);
    echo 
    $userinfo[username]; 
    Die zweite Variante funktioniert dank der Fehlerkorrektur von PHP ebenfalls, aber benötigt in Brenchmarks rund doppelt so lange wie die erste.
    Grund: Ohne vorangestelltes $ geht PHP von einer Konstante aus. Da es diese nicht gibt, wandelt PHP die Konstante in einen String um und versucht es erneut.

    for-Schleife gegenüber foreach bevorzugen

    for ist schneller wie foreach.
    Bei der for-Schleife sollte man bevorzugt den Pre-Inkrement-Operator (++$var) verwenden.

    PHP-Code:
    for($i 0$i 5; ++$i) {
         
    //...

    Ist die Anzahl variabel, weil man z.B. alle Elemente eines Arrays durchgehen will, sollte die Anzahl vorher und nicht in der Schleife berechnet werden!

    PHP-Code:
    $c count($elements);
    for(
    $i 0$i $c; ++$i) {
         
    //...

    ist also schneller wie

    PHP-Code:
    for($i 0$i count($elements); ++$i) {
         
    //...

    Nicht gesetzte Variablen vermeiden

    Wenn die Möglichkeit besteht, dass Variablen nicht gesetzt sein könnten (z.B. bei GET oder POST-Parameter) sollte man dies vor dem Zugriff mit isset() prüfen.
    Sollte man allerdings nicht bei jeder Variable machen, das wäre wiederum auch inperformant.

    Die Ausgabe einer nicht gesetzten Variable braucht ca 6x länger wie die einer gesetzten.
    Wird vor der Ausgabe mit isset() und ?: Operator geprüft, dauert die Ausgabe zwar ca doppelt so lange wie ohne Prüfung wenn die Variable existiert - ist aber ca 3x schneller wie ohne Prüfung wenn sie nicht existiert.

    Scriptausgabe

    Die performanteste Art um statische Texte auszugeben ist echo mit einfachen Anführungszeichen zu verwenden.

    PHP-Code:
    echo 'Bla'
    Bei doppelten Anführungszeichen sucht PHP nach Variablen die interpretiert werden müssen.
    Wobei hier dazugesagt werden muss, dass der Unterschied wirklich sehr gering ist.

    Wird bei Gelegenheit erweitert, darf natürlich auch gerne jemand anders tun.
    Zu dem Thema gibt es auch recht interessante Seiten wie Optimierung und Tipps zur Beschleunigung von PHP und MySQL » PHP Performance


  2. The Following 4 Users Say Thank You to DMW007 For This Useful Post:

    AmJano (22.10.2012), Devon (16.08.2012), Raumi (26.09.2012), Snees (16.08.2012)

  3. #2
    Avatar von Comu
    Registriert seit
    18.11.2011
    Beiträge
    772
    Thanked 753 Times in 363 Posts

    Standard AW: [PHP] Performantes Entwickeln

    Zu erwähnen sei noch das PHP bei doppelten Anführungszeichen nicht nur nach Variablen sucht sondern auch nach beispielsweise \n oder \r. Diese werden mit einfachen Anführungszeichen auch nicht interpretiert.

  4. #3
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard AW: [PHP] Performantes Entwickeln


  5. #4
    Avatar von Diebspiel
    Registriert seit
    18.11.2011
    Beiträge
    311
    Thanked 191 Times in 102 Posts

    Standard AW: [PHP] Performantes Entwickeln

    Zitat Zitat von DMW007 Beitrag anzeigen
    Bei der for-Schleife sollte man bevorzugt den Pre-Inkrement-Operator (++$var) verwenden.
    Das stimmt nicht

    Es ist völlig egal ob man bei der For-Schleife post oder pre benutzt. Es geht nur im die Erhöhung, der Wert ergibt sich aus der vorherigen Bedingung.

  6. #5

    Registriert seit
    19.11.2011
    Beiträge
    496
    Thanked 412 Times in 268 Posts

    Standard AW: [PHP] Performantes Entwickeln

    Dass es in Schleifen egal ist, ob man prä- oder postinkrementiert/-dekrementiert ist klar.
    Aber die Frage ist ja, was ist schneller? Beim Postinkrement/-dekrement wird der alte Rückgabewert der Variable solange im Speicher gehalten, bis diese erneut aufgerufen wurde. Bei der Prä-Alternative ist das nicht so.
    Dieser kleine Performanceunterschied ist aber vernachlässigbar, wie ich finde.
    Geändert von Mr. White (16.08.2012 um 20:49 Uhr)

  7. #6
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.209
    Thanked 9.130 Times in 3.005 Posts
    Blog Entries
    5

    Standard AW: [PHP] Performantes Entwickeln

    Richtig, es geht in dem Fall ausschließlich um die Performance.
    Da laut Brenchmarks Pre schneller ist, habe ich das hier mit aufgenommen.

    Post
    MIN: (0.000434) - AVG: (0.000448) - MAX: (0.001341)

    Pre
    MIN: (0.000403) - AVG: (0.000414) - MAX: (0.001255)

    PHP Benchmark: for | casibus

    Natürlich ist der Unterschied minimal.
    Da es aber wie bereits gesagt für das Resultat keinen Unterschied macht, sehe ich keinen Grund wieso man nicht die performantere Methode bevorzugen sollte.


  8. #7

  9. #8
    Gelöschter Benutzer
    Gast

    Standard AW: [PHP] Performantes Entwickeln


    Wer nutzt denn heutzutage noch apache (außer die, die einen Webspace haben und daran nichts ändern können)?
    Es gibt null Gründe apache zu nutzen, weil nginx schneller und ressourcenfreundlicher ist.
    Geändert von Gelöschter Benutzer (19.02.2013 um 20:16 Uhr)

  10. #9

    Registriert seit
    12.12.2011
    Beiträge
    199
    Thanked 147 Times in 81 Posts

    Standard AW: [PHP] Performantes Entwickeln

    Zitat Zitat von Finn Beitrag anzeigen
    Wer nutzt denn heutzutage noch apache (außer die, die einen Webspace haben und daran nichts ändern können)?
    Genug.

  11. #10
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard AW: [PHP] Performantes Entwickeln

    Zitat Zitat von Finn Beitrag anzeigen
    Wer nutzt denn heutzutage noch apache (außer die, die einen Webspace haben und daran nichts ändern können)?
    Es gibt null Gründe apache zu nutzen, weil nginx schneller und ressourcenfreundlicher ist.
    Auf den Seiten geht es ja nicht nur um Apache, sondern auch um logische Verknüpfungen etc.

Seite 1 von 2 12 Letzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 05.01.2014, 23:19
  2. Java lernen - was entwickeln?
    Von Snees im Forum Java
    Antworten: 5
    Letzter Beitrag: 29.10.2013, 00:23

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.