Laravel: comprimere l’HTML delle vostre pagine automaticamente

Nell’articolo/snippet dedicato a Laravel 4 di oggi vediamo come comprimere automaticamente il codice HTML delle vostre pagine in modo da renderlo minify.

Per farlo usiamo un semplice filtro che intercede prima del caricamento della pagina eliminando di fatto:

  • Commenti al codice
  • Spazi
// Codice da inserire in filters.php
App::after(function($request, $response)
{
 // HTML Minification
 if(App::Environment() != 'local')
 {
 if($response instanceof Illuminate\Http\Response)
 {
  $output = $response->getOriginalContent();
  // Clean comments
  $output = preg_replace('/<!--([^\[|(<!)].*)/', '', $output);
  $output = preg_replace('/(?<!\S)\/\/\s*[^\r\n]*/', '', $output);
  // Clean Whitespace
  $output = preg_replace('/\s{2,}/', '', $output);
  $output = preg_replace('/(\r?\n)/', '', $output);
  $response->setContent($output);
 }
}
});

Molto interessante la seguente funzionalità:

 if(App::Environment() != 'local')

Che di fatto esegue il codice ( e comprime l’html della pagina) solo se il sito è in produzione (LIVE).

Ovviamente non è un tipo di compressione molto elevato ma è comunque un ottimo compromesso per far “decollare” ancor meglio il vostro progetto dal punto di vista prettamente prestazionale. Conosci altri metodi? Segnalaceli nei commenti!

Lascia la tua opinione

3 comments

  • Salve Riccardo,
    prima di tutto complimenti per il sito, contiene troppe cose interessanti 🙂
    Vado alla questione: vorrei applicare il filtro del post ma ho da pochissimo cominciato con laravel e non so inserirlo nel progetto.
    Io l’ho incollato in filter.php ma come lo chiamo dal routes.php?

    Nel dettaglio dovrei inserirlo in:
    Route::group(array(‘before’ => ‘auth’), function() {
    Route::resource(‘home’, ‘HomeController@dashboard’);


    Route::resource(‘askTotal’, ‘OrdersController@askTotal’);
    });

    Grazie
    Giuseppe

    • Ciao Giuseppe, i filtri non ha molto senso richiamarli dalle routes di preciso cosa devi fare con quel filtro?

      • Beh, vorrei che le pagine venissero “compresse” prima di essere mandate al browser.
        Pensavo che quel filtro dovesse essere richiamato da routes, non l’ho scritto perchè ne fossi sicuro o perchè volessi applicarlo per forza li.
        In pratica dove lo richiamo? potresti farmi un esempio esemplificatore?
        Grazie ancora per la disponibilità

×