Minimieren und Bytes sparen ist in Mode! Vor allem bei Javascript Frameworks, CSS, Bildern und was sonst noch so an den Client geschickt wird. Sicherlich sind die mobilen Geräte nicht gerade unschuldig an diesem Trend…
Das Verhalten ist Sinnvoll und spart grade Smartphone-Nutzern wertvolle (Kilo-) Bytes und damit Wartezeiten in mobilen Netzen (mal von LTE abgesehen).

Nun kommt dem ein- oder anderen sicherlich früher oder später die Frage: „Lohnt es sich auch, den PHP Quelltext zu minimieren?“ – Also die Einsparung von der Client-seite auf die Server-seite auszuweiten?

Die Antwort ist definitiv: Nein.

Ich habe das ganze mal mit einer großen PHP Applikation (ca. 2200 PHP Dateien, etwa 17MB) getestet… Die „minimierte“ Applikation ist nur um etwa 2,8 MB kleiner und die performance ist identisch.

Aber wieso eigentlich?

Im Gegensatz zum Client spielt es auf seiten des Servers (beinahe) keine Rolle wie viel KB eingespart werden können… Ob eine PHP Datei nun 10kB kleiner ist interessiert den Rechner herzlich wenig. Die gesamte Ersparnis von 2,8 MB würde nur zu tragen kommen, wenn alle 2200 PHP Dateien geladen würden… Und wenn das der Fall ist, sollte man seine Software-Architektur mal überdenken 😉

Gibt es denn Nachteile?

Ja, die gibt es. Durch das „minimierens“ (z.B. mit Hilfe von php_strip_whitespace) wird die jeweils komplette Datei von unnötigen Whitespaces, Tabs und sonstigen Steuerzeichen sowie Kommentaren bereinigt… Das bedeutet im Klartext: Die PHP Datei wird (für Menschen) nur noch sehr schwer lesbar sein… Ggf. muss man den Quelltext erst mit der Auto-Formatierung (die von vielen IDEs angeboten wird) wieder „lesbar“ machen.

Probiert zum Beispiel mal folgendes: Schaut euch jQuery in der Entwickler-Version und in der, durch den Closure Compiler (Modus: „Whitespace only“), minimierten Version an.

Wie oben geschrieben kann man zum minimieren die PHP Funktion php_strip_whitespace benutzen. Dieser übergibt man einen Dateipfad und erhält als Ergebnis eine einzige lange Zeile mit PHP Code (Sofern keine Strings mit Zeilenumbruchen vorhanden sind, diese bleiben unangetastet).

Im Anschluss habe ich ein kleines Skript für euch zum „selbst ausprobieren“ vorbereitet, das euch vom Standort des Skriptes aus, alle PHP Dateien (rekursiv durch sämtliche Ordner) minimiert:

function recursive_trimming($filepath)
{
    // Hole alle Dateien und Ordner unter "$filepath".
    $items = glob($filepath . '*', GLOB_MARK);
    
    foreach ($items as $item)
    {
        // Handelt es sich um einen Ordner, iterieren wir über diesen.
        if (substr($item, -1) == DIRECTORY_SEPARATOR)
        {
            // Rekursiver Funktionsaufruf.
            recursive_trimming($item);
        }
        else if (substr($item, -4) == '.php')
        {
            /* 
             * Handelt es sich um eine PHP Datei,
             * werden wir die "php_strip_whitespace" Funktion anwenden.
             */
            file_put_contents($item, php_strip_whitespace($item));
        }
    }
}

// Wir beginnen auf de aktuellen Ordner-Ebene.
recursive_trimming('');

Unsere Skript-Datei sieht nach erfolgreichem minimieren übrigens so aus:

function recursive_trimming($filepath) { $items = glob($filepath . '*', GLOB_MARK); foreach ($items as $item) { if (substr($item, -1) == DIRECTORY_SEPARATOR) { recursive_trimming($item); } else if (substr($item, -4) == '.php') { file_put_contents($item, php_strip_whitespace($item)); } } } recursive_trimming('');

Ich habe es noch nicht selbst ausprobiert, aber die Funktion soll auch mit anderen Sprachen funktionieren deren Kommentare der C-Syntax folgen (Wie z.B. Javascript).

Ich hoffe ich konnte einigen da draußen diese Woche etwas neues beibringen und würde mich freuen wenn ihr nächste Woche wieder reinschaut!

In diesem Sinne wünsche ich euch allen eine angenehme Woche und Happy Coding!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..