Minificar saída HTML usando PHP
Dica publicada em PHP / Miscelânea
Minificar saída HTML usando PHP
Recentemente encontrei a necessidade de minificar alguns arquivos para aumentar a nota da empresa no Google PageSpeed Insights. CSS e JS, moleza. Inúmeras ferramentas podem ser encontradas pra isso. Mas, como minificar meu php? Isso me deu alguma dor de cabeça, até que encontrei a função ob_start().
Com ela, você "segura" o buffer de saída, e pode fazer um tratamento nele como, por exemplo, minificar o HTML gerado.
Com expressões regulares, removi espaços desnecessários, comentários etc. Assim, consegui aumentar significantemente a nota do site da empresa!
Para utilizá-la é bem simples. Você precisa criar uma função que tratará o buffer de saída (HTML gerado), e passar seu nome (como string) como parâmetro para ob_start().
No início de um arquivo php, adicione:
Espero que seja útil!
Abraços.
Com ela, você "segura" o buffer de saída, e pode fazer um tratamento nele como, por exemplo, minificar o HTML gerado.
Com expressões regulares, removi espaços desnecessários, comentários etc. Assim, consegui aumentar significantemente a nota do site da empresa!
Para utilizá-la é bem simples. Você precisa criar uma função que tratará o buffer de saída (HTML gerado), e passar seu nome (como string) como parâmetro para ob_start().
No início de um arquivo php, adicione:
<?php
/**
* @function minify Função que minifica a saída html
* @param $buffer Recebe todo o buffer de saída, que seria o html normal
* @return {string} Retorna o html minificado, sem espaços desnecessários ou comentários
* @author <carlosv775@gmail.com> Vinicius Dias
*/
function minify($buffer)
{
$search = array(
"\n",
"\t",
"\r",
"\r\n",
"\n\r",
);
$replace = array();
$buffer = str_replace($search, $replace, trim($buffer));
$search = array(
'/(\s){2,}/',
'/\>(\s)+/',
'/(\s)+\</',
'/\{(\s)+/',
'/(\s)+\{/',
'/\}(\s)+/',
'/(\s)+\}/',
'/\((\s)+/',
'/(\s)+\(/',
'/\)(\s)+/',
'/(\s)+\)/',
'/\=(\s)+/',
'/(\s)+\=/',
'/&&(\s)+/',
'/(\s)+&&/',
'/(\s)+!/',
'/<!--[^\[](.*?)-->/',
'/\/\*(.*?)\*\//',
);
$replace = array(
' ',
'>',
'<',
'{',
'{',
'}',
'}',
'(',
'(',
')',
')',
'=',
'=',
'&&',
'&&',
'!',
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
ob_start("minify");
?>
Espero que seja útil!
Abraços.