Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Codeoptimierung

 

Inhalte

Code-Optimierung


Auch wenn die meisten hier genannten Tipps sich nicht grossartig auf die wahrnehmbare Geschwindigkeit (wenige Millisekunden) auswirken, sollen hier einige genannt werden. Bei der Code-Optimierung geht es zudem nicht __nur__ um die Geschwindigkeit, sondern auch um die Lesbarkeit und Wartbarkeit des Codes. Sogar Code-Formatierung und die Art und Weise wie man programmiert (z.B. die Benennung der Variablen) gehört in dieses Kapitel.

Anführungszeichen


PHP Quellcode:
$objekt = 'Hund';
$str = "Ein $objekt geht spazieren"; // langsam
$str = 'Ein ' . $objekt . ' geht spazieren'; // schnell

Sogenannte SingleQuotes (einfache Anführungszeichen) sind theoretisch schneller als DoubleQuotes, da der String nicht nach Variablen durchsucht werden muss (Parsing). Ausserdem sind bei der letzteren Variante die Variablen eindeutiger erkennbar beim durchlesen des Codes. Laut dieser Quelle kann es aber durchaus sein, dass DoubleQuotes sogar besser abschneiden können. Trotzdem sollte man aufgrund der besseren Lesbarkeit und Wartung des Codes, wenn möglich immer auf die zweite Variante mit den SingleQuotes zurückgreifen.

array_key_exists vs. isset / strlen vs. isset


Weil isset() ein Keyword und keine Funktion ist, ist es etwas schneller als normale Funktionen:
PHP Quellcode:
$fruits = array('apples' => 25, 'bananas' => 15, 'lemons' => 35);
// langsam
if (array_key_exists('apples', $fruits)) {
    echo 'Es hat Äpfel!';
}
// schnell
if (isset($fruits['apples'])) {
    echo 'Es hat Äpfel!';
}

Für strlen() gilt dasselbe:
PHP Quellcode:
if (strlen($str) >= 5) {
    // langsam
}
if (isset($str{5})) {
    // schnell
}


echo


PHP Quellcode:
echo 'Hallo ' . 'Welt' . '!'; // langsam
echo 'Hallo ', 'Welt', '!'; // schnell

Quelle
Achtung: Auch hierbei muss darauf hingewiesen werden, dass die Punktverknüpfung wesentlich verbreiterter ist und Strings sowieso so verknüpft werden. Ausserdem sollte man sich vielleicht überlegen, ob nicht Folgendes sauberer wäre:
PHP Quellcode:
$output = 'Hallo ' . 'Welt' . '!';
echo $output;


false vs. FALSE


PHP Quellcode:
if ($var === FALSE) { // langsam
if ($var === false) { // schnell

Quelle

Das Schnellere zuerst


PHP Quellcode:
if (langsameFunktion() || schnelleFunktion()) {
    // langsam
}
if (schnelleFunktion() || langsameFunktion()) {
    // schnell
}


Typisierung


PHP Quellcode:
if ($foo == 10) { // langsam
if ($foo === 10) { // schnell

Und noch ein kleiner Trick für schnelle Finger:
PHP Quellcode:
if ($foo = 10) { // trifft immer zu
if (10 = $foo) { // wirft Error aus

Es kann schon mal passieren, dass ein = vergessen wird. In 1. Falle fällt dies jedoch nicht auf: Weil der Variable $foo immer der Wert 10 zugewiesen kann, wird hier kein Error ausgegeben. Wenn man also grundsätzlich die Variablen auf die rechte Seite nimmt, ist man gegen Flüchtigkeitsfehler besser geschützt.

Vereinfachung


PHP Quellcode:
// kompliziert
function test($foo)
{
    if (strpos($foo, '@') > 0) {
        return true;
    } else {
        return false;
    }
}

// einfacher
function test($foo)
{
     return false !== strpos($foo, '@');
}

Versuche auch tiefe if / else Verschachtelungen zu vermeiden. Arbeite wenn immer möglich mit Funktionen und halte diese so primitiv wie möglich. Beende Funktionen mit return so früh wie möglich:
PHP Quellcode:
// ok
function isPositiveNumber($foo)
{
    if (is_numeric($foo)) {
        if ($foo > 0) {
            return true;
        }
    }
    return false;
}

PHP Quellcode:
// besser
function isPositiveNumber($foo)
{
    if (!is_numeric($foo)) {
        return false;
    }
    if ($foo > 0) {
        return true;
    }
    return false;
}


Benennung


Ein sehr wichtiger Punkt für die Wartbarkeit des Codes. Grundsätzlich gilt etwa folgendes:
- Wähle möglichst kurze Variablennamen
- Wähle möglichst eindeutige Bezeichnungen
- Wenn Du Englisch kannst, programmiere auch in Englisch, ansonsten: Lerne Englisch

Zählervariablen


Standardnamen dafür sind $i und allenfalls $j. $i deshalb, weil iteriert wird. Bsp:
PHP Quellcode:
for ($i=0; $i<5; $i++) {
    echo $i;
    for ($j=0; $i<3; $j++) {
        echo $i;
    }
}

Aber Achtung: Natürlich sollte viel Code in Schleifen vermieden werden, wenn es dennoch vorkommen sollte, wäre es allenfalls besser der Variable $i eine genauere Bezeichnung zu geben:
PHP Quellcode:
for ($textFieldIterator=0; $textFieldIterator<5; $textFieldIterator++) {
    // viel Code
    echo $textFieldIterator;
    // viel Code
}

Hinweis: Einige werden jetzt behaupten, dass ++$i schneller sei als $i++. Da Letzteres jedoch mehr verbreitet ist, ist es «normal» diese Variante zu verwenden.

Beim Iterieren über ein Array, dessen Größe sich während des Schleifendurchlaufs nicht ändert, ist es effizienter, die Größe einmal vor Schleifenbeginn zu ermitteln und nicht bei jedem Durchlauf.
PHP Quellcode:
// $a = array(...);

for ($i = 0; $i < count($a); $i++) {
    // langsam
}

$cnt = count($a);
for ($i = 0; $i < $cnt; $i++) {
    // schnell
}


Funktionen, Klassen und Interfaces


Hier ist eine klare Benennung ungeheim wichtig – wichtiger als bei Variablen. Denn hier entstehen die Schnittstellen nach Aussen: Die sogenannte API. Hierbei sollte man sich wenn immer möglich an die wichtigsten Standards halten wie z.B.
- Verwende CamelCase
- Klassen gross beginnen: MyClassCanNothing {}
- Funktionen / Methoden klein beginnen: myFunctionDoesNothing()
- Variablen / Eigenschaften klein beginnen: $myVariableStoresNothing

Auch sollte bei der API natürlich auf eine gute Dokumentation und allgmein das API Design geachtet werden.

Tools


eAccelerator
Zend Optimizer

Lesenswertes



Mitwirkende: Marc Ermshaus, puritania
Erstellt von puritania, 31.03.2008 am 16:48
Zuletzt bearbeitet von Marc Ermshaus, 08.05.2009 am 01:33
15 Kommentare , 5846 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:50 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC