Minify and Gzip

Hello,

I just wanted to share a perl script I made for nginx. Its aim is to:

  • minify CSS (and by a simple modification JS)
  • deflate it
  • keep it as a local file

It’s based on the nice http://wiki.nginx.org/NginxEmbeddedPerlMinifyJS
with the use of IO::Compress::Gzip.

Any comment/improvement is welcome.

Cheers,

C.

== Script ==

package CSSMinify;
use nginx;
use CSS::Minifier qw(minify);
use IO::Compress::Gzip ;

sub handler {
my $r=shift;
my $cache_dir="/tmp"; # Cache directory where minified file will be
kept
my $cache_file=$r->uri;
$cache_file=~s!/!_!g;
$cache_file=join("/", $cache_dir, $cache_file);
my $uri=$r->uri;
my $filename=$r->filename;
return DECLINED unless -f $filename;

$r->header_out(‘Cache-Control’, ‘30d, must-revalidate’);
$r->header_out(‘Content-Encoding’=>‘gzip’);
$r->send_http_header;
return OK if $r->header_only;
if (! -f $cache_file) {
open(INFILE, $filename) or die “Error reading file: $!”;
my $output = minify(input => *INFILE);
close(INFILE);
my $gz = new IO::Compress::Gzip($cache_file, Minimal => 1,
AutoClose => 1, Append => 0) or return 0;
print $gz $output;
}

$r->sendfile($cache_file);
return OK;
}
1;
END