Compactando o HTML de suas páginas

Fiz um código super simples, para deixar qualquer HTML em uma única linha, sem tabs, espaços, .

Sobre o CSS Eu já escrevi o post Eu vs cache. Ganhei a batalha. Vou usar o projeto do Trabalhando com URL amigável no PHP para edita-lo e compactar o HTML dele.

Um dos segredos deste projeto é que todas as requisições passam pelo index.php graças ao direcionamento do .htaccess.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

 Então, neste index.php devo adicionar o chamado da função ob_start() antes de qualquer saída HTML. No meu caso vou adiciona-lo na linha 2, após o <?php .

<?php
ob_start();
require "classes/Url.class.php";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br">
<head>
.....

O que o ob_start() faz?

Esta função irá ativar o buffer de saída. Enquanto o buffer de saída estiver ativo, não é enviada a saída do script (outros que não sejam cabeçalhos), ao invés a saída é guardada em um buffer interno.

O conteúdo deste buffer interno pode ser copiado em uma variável usando ob_get_contents(). Para enviar o que esta no buffer interno, use ob_end_flush(). Alternativamente, ob_end_clean() irá silenciosamente descartar o conteúdo do buffer.

Fonte: http://br.php.net/manual/pt_BR/function.ob-start.php

Então esta função manda guardar tudo que é HTML que deveria ser enviado para o browser para poder ser tratado depois. Então agora com este HTML guardado podemos analisar, editar e fazer o que for preciso. Então na última linha do nosso index vou adicionar as seguintes linhas:

$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);

A função ob_get_clean obtém o conteúdo do buffer e exclui o buffer de saída atual e neste buffer esta todo o HTML que foi gerado pelo site/sistema/blog.

A segunda linha faz um replace de tudo que for espaço, quebra de linha (\n e \r) e tabulação (\t)por um espaço. Então as centenas de espaços que existe para indentar seu código serão removidos por um único espaço.

E, por fim nosso index.php fica assim:

<?php
ob_start();
require "classes/Url.php";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Trabalhando com URL amigável no PHP</title>
    <meta name="author" content="Layout: Mauricio Samy Silva / Código: Eduardo Kraus" />
    <link rel="stylesheet" type="text/css" href="<?php echo URL::getBase() ?>css/style.css"/>
</head>
<body>
<div id="tudo">
    <div id="topo">TOPO</div>
    <div id="principal">
        <?php
        $modulo = Url::getURL( 0 );

        if( $modulo == null )
            $modulo = "modulo1";

        if( file_exists( "modulos/" . $modulo . ".php" ) )
            require "modulos/" . $modulo . ".php";
        else
            require "modulos/404.php";
        ?>
    </div>
    <div id="navegacao">
        <p><a href="<?php echo URL::getBase(); ?>modulo1">Módulo 1</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo2">Módulo 2</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo3">Módulo 3</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo4">Módulo 4</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo5">Módulo 5</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo6">Módulo 6</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo7">Módulo 7</a></p>
        <p><a href="<?php echo URL::getBase(); ?>modulo8/parametro/sei-la/alguma_coisa/25/quase-nada">
            Módulo 8 com sub-módulo</a></p>
        <p><a href="<?php echo URL::getBase(); ?>qualquer">Módulo 404</a></p>
        <p><a href="<?php echo URL::getBase(); ?>teste.php">Teste.php</a></p>
    </div>
    <div id="rodape">RODAPE</div>
</div>
</body>
</html>
<?php
$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);

Veja o exemplo rodando completo em /code/10045/ e não se esqueça de olhar o código fonte dele.

Quer o código fonte completo deste exemplo? Clique aqui.

Se você usa Wordpress, edite o arquivo index.php da raiz do Wordpress e faça assim:

<?php
ob_start();
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');

$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);

Veja rodando: view-source:http://www.marcelaroesner.com.br/category/blog

Fique por dentro de nossas novidades, ideias e atualizações