-
-
Save zmsaunders/5619519 to your computer and use it in GitHub Desktop.
<?php | |
### --- Snip --- ### | |
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); | |
} | |
} | |
}); | |
### --- Snip --- ### |
Nice, I like the cleaned up version. I had a feeling that comment cleaning would come back to bite me at some point with IE's conditional Comments. I'll have to play around with it a bit and see if I can get it to behave.
Thanks @zach && @garagesocial, I added a substitute for HTML comment filter to exclude the IE conditions. https://gist.github.com/paparts/9113258
Well done @zmsaunders! It helped a lot! Cheers!
Verify that the response header is text/html, to avoid problems when returning an image for example.
https://gist.github.com/miguelbalboa/9224ecc1daeadff5ab49
minifying only text/html output
// HTML Minification
if(App::Environment() != 'local')
{
if($response instanceof Illuminate\Http\Response)
{
$output = $response->getOriginalContent();
if($response->headers->get('content-type') == 'text/html; charset=UTF-8')
{
// 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);
}
}
}
This code has an important error. Run the full content of the page twice. The first to generate the page, and the second to go through the :: after. That doubles the load times. I think it's worse than spending the HTML uncompressed. You can do the test by putting a log on a page and see that the refresh the log is printed twice.
Thanks for this Zach. We restructured it a bit on our fork https://gist.github.com/garagesocial/6059962
Also note the first filter
/<!--([^\[|(<!)].*)/
breaks when using the HTML5 Boilerplate it will suck up line<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
@ https://github.com/h5bp/html5-boilerplate/blob/master/index.html#L5