Minificar saída HTML usando PHP

Publicado por Carlos Vinícius dos Santos Dias em 10/02/2016

[ Hits: 5.366 ]

Blog: https://github.com/CViniciusSDias/

 


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:

<?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.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Tutorial ensinando a criar portais com o Joomla 1.6

Curso online e gratuito de CakePHP

Curso gratuito sobre criação de aplicativos em PHP

Nasce uma lista de Joomla com boa estrutura

Quebra de linha no PHP

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts