6. August 2010
CSS minimieren und komprimieren mit PHP
Heute sind CSS Dateien von 200 – 300 KB grösse keine Seltenheit. Auch in Zukunft werden Cascading Style Sheets immer grösser und komplexer werden. Natürlich gibt es Werkzeuge die CSS komprimieren. Beim Minimieren und/oder Komprimieren, leidet oft die Übersichtlichkeit in den entsprechenden Dateien. Gegen das Aufsplitten in einzelne Teile spricht die Performance (zu viele Requests).
Hier eine elegante Idee, wie man die Übersichtlichkeit von CSS erhöht, und deren Grösse massiv reduziert. Die CSS – Datei wird dabei durch den PHP Parser geschickt und heisst nun style.php.
<link rel="stylesheet" href="css/style.php" type="text/css" media="screen, projection" />
Danach werden die einzelnen CSS Dateien geladen und vom Server komprimiert (ohne Kommentare und Zeilenabstände) ausgeliefert.
<?php
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
/*Kommentar entfernen */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* entfernen von abständen, Zeilen usw.*/
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
/*lade CSS Dateien */
include('css/reset.css');
include('css/layout.css');
include('css/navi.css');
include('css/forms.css');
ob_end_flush();
?>
Das gefällt mir. Sauber zum arbeiten und schlank in der Anwendung ist Die Reinhold Weber – Methode. Gefunden bei catswhocode.com.
Am 25. März 2011 um 06:47 Uhr
Und wenn die Komprimierung nicht für jeden Request durchführen möchte und ein wenig Performance zu sparen, lohnt es sich vielleicht, die CSS-Dateien gleich statisch zu komprimieren. In der Regel ändern sich diese ja ohnehin selten. Das kostenlose Web-Tool http://shrinker.ch kann da allenfalls eine Hilfe sein.
Vor allem die Lösung mit Web-Link ist elegant, wenn man CSS-Dateien mit @import untereinander verknüpft.
Achja shrinker.ch shrinkt auch JavaScript-Dateien
Am 25. März 2011 um 08:33 Uhr
Vielen Dank für deinen Input. shrinker ist auch für mich ein Thema. Der Linkl befindet sich schon länger in meiner Linkdatenbank. http://tag.schaufler.ch/tags.php/css+javascript+komrimieren
CSS mittels @import zu verknüpfen, halte ich, aus performance Gründen, für keine gute Idee. Zusätzliche Infos zu dieser Problematik findest Du bei: http://www.stevesouders.com/blog/2009/04/09/dont-use-import/
Am 8. Januar 2012 um 16:40 Uhr
Dein str_replace() kann man auf folgenes reduzieren: $buffer = str_replace(array(“\r”, “\n”, “\t”, ‘ ‘), ”, $buffer);
Funktioniert gleich gut und sogar schneller