CakePHP: abilitare la compressione dei css con csspp

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

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