Pra quem trabalha com grandes portais, sabe muito bem que qualquer Kbyte economizado é muito bem vindo.
Partindo dessa necessidade, resolvi procurar alguma coisa pra compactar os arquivos CSS automaticamente.
Acabei encontrando uma solução criada pelo desenvolvedor alemão Reinhold Weber.
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
/* remove comments */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* remove tabs, spaces, newlines, etc. */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
/* your css files */
include('master.css');
include('typography.css');
include('grid.css');
include('print.css');
include('handheld.css');
ob_end_flush();
Ainda não satisfeito com o resultado, eu dei uma melhorada na função que remove caracteres desnecessários do CSS. Ficou assim:
function comprimirCss($css) {
// Remover comentarios
$css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css);
// Remover Tabs e NewLines
$css = preg_replace('#(\r|\n|\t)#', '', $css);
// Remover caracteres com espaços extras
$css = preg_replace('#[ ]*([,:;\{\}])[ ]*#', '$1', $css);
// Extras
$css = strtr($css, array(
';}' => '}'
));
return $css;
}
O resultado final? Consegui diminuir o tamanho do CSS de 13KB para 9.2KB. E com o gzip ativo no apache, o arquivo transferido para o usuário fica com apenas 2.4KB.
Fui.