Optimierung des Blogs mit PHP

Rainer Schulz » 18. April 2011 um 15:33 Uhr

5 Kommentare

PHP 

Vorwort

Wie ich vor Kurzem berichtet habe, arbeite ich momentan an der zweiten Version dieses Blogs. Nicht nur das Design, sondern auch das komplette Backend des Blogs schreibe ich neu (in PHP). Im Zusammenhang damit habe ich mich ein wenig über Optimierungsmöglichkeiten informiert und möchte euch ein paar hier vorstellen.

Autoload von Klassen in PHP

Wenn man, so wie ich, in seinem Webprojekt alles in Klassen schreibt (objektorientierte Programmierung), dann hat man mehrere Möglichkeiten diese Klassen einzubinden. Früher habe ich zum Beispiel alle Klassen global via include oder request in meiner Konfigurationsdatei geladen. Man kann die Klassen aber auch immer nur an den Stellen laden an welchen man sie braucht, dass kann wiederum eine menge Schreibarbeit bedeuten.

Ab der PHP-Version 5 kann man dies nun bedeutend einfacher regeln. Die PHP-Version 5 bietet uns die Möglichkeit eine __autoload-Funktion zu definieren, welche automatisch aufgerufen wird sobald eine Klasse initialisiert werden soll (new Klassenname();).

Anmerkung: diese Funktion läd auch abgeleitete Klassen und implementierte Interfaces!

Nun habe ich, statt alle Klassen immer global zu laden, in meiner Konfigurationsdatei diese Funktion definiert:
function __autoload( $class ) {
    if ( !class_exists( $class ) && !interface_exists( $class ) ) {
        $paths = array(
            '/Pfad/zu/den/Klassen/class.'.$class.'.php',
            '/Pfad/zu/den/Interfaces/interface.'.$class.'.php',
            '/Pfad/zu/den/abstrakten/Klassen/abstract.'.$class.'.php'
        );

        foreach ( $paths as $file ) {
            if ( file_exists( $file ) && is_file( $file ) ) {
                require_once $file;
                return true;
            }
        }

        die( "<h1>Error: Class '<em>$class</em>' not found!</h1>" );
    }

    return true;
}

GZIP-Komprimierung mit PHP

Für Webmaster auf deren Servern die Module für die GZIP-Komprimierung (mod_deflate und mod_gzip bei Apache) nicht installiert oder aktiviert sind, bietet es sich an die in PHP eingebaute GZIP-Komprimierung zumindest für die PHP-Dateien zu verwenden. Damit lässt sich der Datentransfer von PHP-Dateien um bis zu 80% reduzieren.

Am Anfang einer PHP-Datei fügt man einfach folgenden Code hinzu:
if ( substr_count( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) ) {
    ob_start( 'ob_gzhandler' );
} else {
    ob_start();
}

Und am Ende einfach folgenden:
ob_end_flush();

Content Type und Charset via PHP-Header

Um das Rendern der Seite im Browser zu beschleunigen, kann man vorab via PHP einen Header übergeben. Dieser Header wird von den meisten Browsern ausgelesen, diese Browser brauchen dann nicht erst die Metadaten im HTML-Quelltext auslesen um das Rendern der Seite zu starten. Dieser Header sollte am Anfang der PHP-Datei gesetzt werden.

In meinem Blog benutze ich zum Beispiel diesen Header:
header( 'Content‑type: text/html; charset=ISO‑8859‑1' );

Abschließendes

Ich hoffe, dieser kleine Einblick war verständlich. Sollte ich noch weitere nützliche Optimierungen finden, werde ich diese hier wieder vorstellen.

 

Diese Artikel könnten dich auch interessieren

1. Ausnahmebehandlung mit PHP » 01. Januar 2012
2. Alter eines Zeitstempels mit PHP ermitteln » 04. Mai 2011
3. Objektorientierte Programmierung » 29. Oktober 2010
4. Grundlagen der Programmierung » 26. Oktober 2010
5. Meine PHP Templateklasse. » 18. Oktober 2010

Diesen Beitrag teilen

Twitter Facebook Delicious Digg Bei allen Services (Mister Wong, Yigg, Infopirat etc.)

  1. 5 Kommentare zum Beitrag.

  2. 1. von Daniel S am 18. August 2011 um 17:13:05 Uhr.

    Hallo,

    schöner Blog. Für das Autoloading empfiehlt sich spl_autoload anstelle von __autoload. Außerdem solltest du auf utf-8 setzen :)

  3. 2. von Rainer Schulz am 18. August 2011 um 18:06:28 Uhr.

    Hallo Daniel,

    spl_autoload werde ich mir bei Gelegenheit mal anschauen und über utf-8 kann man geteilter Meinung sein :D

    Gruß

  4. 3. von Rainer Schulz am 22. August 2011 um 17:29:45 Uhr.

    Hallo Daniel,

    nach ausgiebigen Tests und dem Austausch von Erfahrungen in Entwicklerforen werde ich bei __autoload() bleiben.

    Das Handling und der Speed von __autoload() sind meines Erachtens besser als bei spl_autoload().

    Gruß

  5. 4. von Daniel S am 27. August 2011 um 22:33:03 Uhr.

    Hi,

    das __autoload einen Performancevorteil haben soll, habe ich noch nie gelesen und es erscheint mir ehrlich gesagt etwas suspekt. Hast du da einen Link für mich? Zum Handling: Ich würde eher sagen, SPL ist flexibler. Aber jeder hat da eben seine Prioritäten.

    Die Vorteile der SPL ist, dass du mehr als einen Autoload implementieren kannst. Nutzt du irgendeine Bibliothek, die ebenfalls __autoload hat, wird ein Autoloader überschrieben. Außerdem kannst du mit SPL auch deine Autoloader während der Laufzeit wieder entfernen.

  6. 5. von Rainer Schulz am 28. August 2011 um 15:04:38 Uhr.

    Hallo Daniel,

    die Flexibilität und Mehrfachimplementierung von Autoloadern bei spl_autoload ist zwar schön, aber leider völlig irrelevant für mein kleines Projekt hier. Da ich auch keine Bibliotheken benutze gehe ich auch nicht das Risiko des Überschreibens ein.

    Die Geschwindigkeit habe ich selber auf meinem Server hier getestet. Ich habe zwei Varianten mit spl_autoload und __autoload getestet, wobei __autoload immer etwas schneller war.

    Gruß

  7. Schreib einen Kommentar.
  8. Kommentare sind deaktiviert.