上古神器,【前端神器】yuicompressor 和 Closure Compiler 的 PHP压缩类

这位园友,我看你天赋异常,气宇轩昂,玉树临风,将来必成大器。我现在给你个小小的考验,这里有一篇文章,你把他看了,然后我们再谈谈拯救编程界的事情,你看如何?
------------------------------------------------------------------
因为要架设个 yuicompressor 和 closure compiler 在线压缩的网站 方便下大众和自己
http://sweet.fengyin.name/?hl=zh-CN
(这个现在已经架好了,很稳定不想安装压缩工具的可以长期使用这个网站的)
------------------------------------------------------------------

起初我是想在网上搜索了一下, 发扬拿来主义精神,结果是发现比较悲剧了,于是我还是闭门造轮子自己写吧。
今天终于放出代码,
只是大家不要希望写的有多好,因为我完全不懂PHP。完全不懂。。。

不胡扯了,我贴代码。
上古神器,【前端神器】yuicompressor 和 Closure Compiler 的 PHP压缩类上古神器,【前端神器】yuicompressor 和 Closure Compiler 的 PHP压缩类yui-compressor.class.php'java', //或自己指定 jdk 安装的 bin 目录 (绝对路径) 'jar_file'=>'D:\www\htdocs\yuicompressor.jar', 'save_path'=>'D:\www\htdocs\results\\', //必须有可写权限 // -------- 全局设置 --------- // 'charset'=>'utf-8', //文件的编码 'line-break'=>false, //在指定的列后插入一个 line-bread 符号 // -------- javascript 代码的配置选项 --------- // 'nomunge'=>false, //只是简单压缩,清除空行空格注释等。 'semi'=>false, //保留所有的分号 'optimizations'=>false, //禁止优化代码. )); //对单个文件压缩 $resutlt = $yui->compress('D:\www\htdocs\swfobject_src.js'); print_r ($resutlt); //对目录文件压缩 $resutlt = $yui->directory('D:\www\htdocs\\'); print_r($resutlt); ---------------------------------------------------------- //Linux 调用方式: $yui = new yuicompressor(array( 'java_home'=>'java', //或自己指定 jdk 安装的 bin 目录 (绝对路径) 'jar_file'=>'/home/admin/yuicompressor-2.4.2.jar', 'save_path'=>'/home/admin/results/', //必须有可写权限 // -------- 全局设置 --------- // 'charset'=>'utf-8', //文件的编码 'line-break'=>false, //在指定的列后插入一个 line-bread 符号 // -------- javascript 代码的配置选项 --------- // 'nomunge'=>false, //只是简单压缩,清除空行空格注释等。 'semi'=>false, //保留所有的分号 'optimizations'=>false, //禁止优化代码. )); //对单个文件压缩 $resutlt = $yui->compress('/home/admin/style.css'); print_r ($resutlt); //对目录文件压缩 $resutlt = $yui->directory('/home/admin/'); print_r($resutlt); */ class yuicompressor { function __construct($options = array()) { $this->options = $options; } function args($o) { $o['line-break'] && ($line_break = ' --line-break ' . $o['line-break'] . ' '); $o['charset'] && ($charset = ' --charset ' . $o['charset'] . ' '); $o['nomunge'] && ($jsargs .= ' --nomunge '); $o['semi'] && ($jsargs .= ' --preserve-semi '); $o['optimizations'] && ($jsargs .= ' --disable-optimizations '); $exten = $this->getExtension($o['file']); $cmd = array(); $newfile = $o['save_path'] . $this->replace($o['file']); $cmd['file'] = $newfile; $cmd['shell'] = $o['java_home'] . ' -jar ' . $o['jar_file'] . ' --type ' . $exten['extension'] . $charset . $line_break . $jsargs . ' -v --verbose ' . $o['file'] . ' > ' . $newfile; return $cmd; } function getExtension($fn) { return pathinfo(strtolower($fn)); } function replace($fn) { $exten = $this->getExtension($fn); return str_replace($exten['extension'], 'min.' . $exten['extension'], $exten['basename']); } function exec($cmd) { exec($cmd['shell'], $out, $status); return array( 'shell' => $cmd['shell'], 'out' => $out, 'status' => $status, 'success' => file_exists($cmd['file']) ? $cmd['file'] : false ); } function ls($dir) { !($dh = opendir($dir)) && exit('open directory error'); while (($file = readdir($dh)) !== false) { $exten = $this->getExtension($file); if ($exten['extension'] == 'js' || $exten['extension'] == 'css') { $files[] = str_replace("/", DIRECTORY_SEPARATOR, $dir . $file); } } closedir($dh); return $files; } function directory($dir) { !is_dir($dir) && exit('directory error'); foreach ($this->ls($dir) as $file) { $fn[] = $this->compress($file); } return $fn; } function compress($file) { $this->options['file'] = $file; return $this->exec($this->args($this->options)); } } ?>

closure-complier.class.php

或者直接到这两个地址去下载:
http://code.google.com/p/php-closure-complier-class/
http://code.google.com/p/php-yui-compressor-class/

我们都知道 yuicompressor 和 closure compiler 都是 javascript 神器,唯一不同的是 yuicompress 吃进去吐出来,还是你的,而 closure compiler 吃进去吐出来可能就不是你的了。相比 yuicompressor 这个纯粹的压缩机,毫无疑问 closure compiler 更加强大。可定制性更强~
貌似本篇文章不是讨论技术的,关于 yuicompressor 和 closure compiler 我收集了一大片文章,有兴趣的,点了自然会了解。
赵大婶的 http://www.cnblogs.com/JeffreyZhao/archive/2009/12/09/ikvm-google-closure-compiler.html
玉伯大婶的 http://lifesinger.org/blog/2009/11/closure-compiler-vs-yuicompressor/
YUI Compressor压缩JavaScript原理 http://www.blueidea.com/tech/web/2009/6923.asp
淘宝UED (Closure Compiler 高级模式及更多思考)) http://ued.taobao.com/blog/2010/12/23/advanced-optimization-in-closure-compiler-and-more/

Tags:  上古神器2 八门神器 极光世界神器礼包 天域神器 上古神器

延伸阅读

最新评论

发表评论