改进nginx压缩javascript的功能

多鱼的夏天 2013-06-20 11:48:08
http://wiki.nginx.org/EmbeddedPerlMinifyJS



package Minify;
use nginx;
use JavaScript::Minifier qw(minify);

sub handler {
my $r=shift;
my $cache_dir="/tmp"; # Cache directory where minified files 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;

if (! -f $cache_file) {
open(INFILE, $filename) or die "Error reading file: $!";
open(OUTFILE, '>' . $cache_file ) or die "Error writting file: $!";
minify(input => *INFILE, outfile => *OUTFILE);
close(INFILE);
close(OUTFILE);
}
$r->send_http_header("application/javascript");
$r->sendfile($cache_file);
return OK;
}
1;
__END__


以上代码的逻辑是,若tmp目录不存在压缩的javascript,则生成压缩的javascript。

这个逻辑有个问题,若javascript文件更新后,nginx不会重新压缩javascript文件。

逻辑需要改进成这样:若tmp目录中的javascript文件时间比原javascript文件时间旧,则重新生成压缩的javascript的文件。

我不懂perl,需要高人帮助我实现这个逻辑
...全文
185 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2013-06-20
  • 打赏
  • 举报
回复
shell, perl, ruby与python中的文件检测/比较: http://blog.endpoint.com/2009/08/file-test-comparison-table-for-shell.html

  if (! -f $cache_file || (stat($filename))[9] > (stat($cache_file))[9]) {
夏之冰雪 2013-06-20
  • 打赏
  • 举报
回复
在这个压缩脚本前进行一次判断,对比文件时间,压缩文件时间旧则触发删除操作,否则什么都不执行。然后调用压缩程序就可以了。 perl 文件操作函数查查就好

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧