CakePHP: abilitare la compressione dei css con csspp
Per ridurre il tempo e la banda necessaria al caricamento dei css è possibile comprimere i css con degli script php che intervengono prima dell'invio del file al browser. Con poche modifiche è possibile automatizzare l'operazione per le applicazioni sviluppate in CakePHP. La versione di cake utilizzata per il test è la 1.3.6. 1) Nel file /app/config/core.php decommentare la riga:
Configure::write('Asset.filter.css', 'css.php');
2) Scaricare il file csspp.php da https://github.com/jeremyboles/csspp e copiarlo nella directory /app/vendors/csspp/ 3) Sostituire la funzione make_clean_css() del file /app/webroot/css.php con la seguente:
function make_clean_css($path, $name) {
App::import('Vendor', 'csspp' . DS . 'csspp');
$data = file_get_contents($path);
$name = str_replace('/',DS,$name);
$name = str_replace('\\',DS,$name);
$csspp = new csspp($name,CAKE_CORE_INCLUDE_PATH.DS.APP_DIR.DS.WEBROOT_DIR.DS);
$output = $csspp->process($data);
$ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100);
$output = " /* file: $name, ratio: $ratio% */ " . $output;
return $output;
}
Utilizzando l'helper html per caricare i css:
echo $this->Html->css(array('admin/layout'), null, array('inline'=>true));
l'output sarà automaticamente compresso; se non si utilizza l'helper sarà sufficiente richiamare i files css con il prefisso /ccss/ invece del prefisso standard /css/. Lo script inoltre crea un file di cache nella cartella /app/tmp/cache/css che viene aggiornato quando si modifica il file css principale.

Commenti