项目中对模板和js,css文件进行压缩的处理类
浏览:3624次 出处信息
我们知道,在html的页面中,所有空格和换行符其实都会占据一定的空间,即使使用了gzip压缩,在传输过程中依然会浪费用户的流量和我们自己服务器的带宽,此脚本就是为了解决这个问题而诞生的。
请自行下载Google Closure Compiler,和YUIcompressor
点此去下载Google Closure Compiler
点此去下载YUIcompressor
将compiler.jar和yuicompressor-2.4.7.jar放在与本脚本相同的目录下即可
代码很简单,没什么好说的。。
enjoy it!
<?php
/**
* 代码压缩处理
*
* 1.压缩模板文件,去掉所有换行和头尾空格
* 2.压缩js和css文件,生成同名.min.js或.min.css文件
*
* @author 废墟 <r.anerg#gmail.com>
* @version 1.1
* @link http://anerg.com
*
*/
ini_set("memory_limit", -1);
ini_set("display_error", 1);
error_reporting(E_ALL);
date_default_timezone_set('Asia/Shanghai');
define('BASEPATH', dirname(__FILE__));
class Compress_Template {
private $input_dir; //模板源目录
private $output_dir; //压缩后的模板目录
public function __construct($type) {
$this->input_dir = dirname(BASEPATH) . '/application/views_src/';
$this->output_dir = dirname(BASEPATH) . '/application/views/';
$this->js_dir = dirname(BASEPATH) . '/wwwroot/static/js/';
$this->css_dir = dirname(BASEPATH) . '/wwwroot/static/css/';
}
public function run() {
exec('rm ' . $this->output_dir . ' -rf');
$this->compress_file($this->input_dir, $this->output_dir);
$this->compress_js_css();
}
private function compress_js_css() {
exec('for JS in $(find ' . $this->js_dir . ' -type f -name "*.js"|grep -v "min.js"); do java -jar compiler.jar --charset=UTF-8 --compilation_level=SIMPLE_OPTIMIZATIONS --js=$JS --js_output_file=${JS%%.js}.min.js; done');
exec('for CSS in $(find ' . $this->css_dir . ' -type f -name "*.css"|grep -v "min.css"); do java -jar yuicompressor-2.4.7.jar --type css --charset utf-8 -o ${CSS%%.css}.min.css $CSS; done');
}
private function compress_file($input, $output) {
$input = rtrim($input, DIRECTORY_SEPARATOR);
$output = rtrim($output, DIRECTORY_SEPARATOR);
if (is_dir($input)) {
$input .= DIRECTORY_SEPARATOR;
$output .= DIRECTORY_SEPARATOR;
foreach (glob($input . "*") as $path) {
$compress_path = str_replace($input, $output, $path);
if (is_dir($path)) {
if (!is_dir($compress_path)) {
$this->mkpath($compress_path);
}
$this->compress_file($path, $compress_path);
}
if (is_file($path)) {
$data = array_map("trim", file($path));
file_put_contents($compress_path, join('', $data));
}
}
}
}
private function mkpath($path) {
return is_dir($path) or ($this->mkpath(dirname($path)) and (mkdir($path, 0777) and chmod($path, 0777)));
}
}
$app = new Compress_Template();
$app->run();
echo "OK!\n";
/**
* 代码压缩处理
*
* 1.压缩模板文件,去掉所有换行和头尾空格
* 2.压缩js和css文件,生成同名.min.js或.min.css文件
*
* @author 废墟 <r.anerg#gmail.com>
* @version 1.1
* @link http://anerg.com
*
*/
ini_set("memory_limit", -1);
ini_set("display_error", 1);
error_reporting(E_ALL);
date_default_timezone_set('Asia/Shanghai');
define('BASEPATH', dirname(__FILE__));
class Compress_Template {
private $input_dir; //模板源目录
private $output_dir; //压缩后的模板目录
public function __construct($type) {
$this->input_dir = dirname(BASEPATH) . '/application/views_src/';
$this->output_dir = dirname(BASEPATH) . '/application/views/';
$this->js_dir = dirname(BASEPATH) . '/wwwroot/static/js/';
$this->css_dir = dirname(BASEPATH) . '/wwwroot/static/css/';
}
public function run() {
exec('rm ' . $this->output_dir . ' -rf');
$this->compress_file($this->input_dir, $this->output_dir);
$this->compress_js_css();
}
private function compress_js_css() {
exec('for JS in $(find ' . $this->js_dir . ' -type f -name "*.js"|grep -v "min.js"); do java -jar compiler.jar --charset=UTF-8 --compilation_level=SIMPLE_OPTIMIZATIONS --js=$JS --js_output_file=${JS%%.js}.min.js; done');
exec('for CSS in $(find ' . $this->css_dir . ' -type f -name "*.css"|grep -v "min.css"); do java -jar yuicompressor-2.4.7.jar --type css --charset utf-8 -o ${CSS%%.css}.min.css $CSS; done');
}
private function compress_file($input, $output) {
$input = rtrim($input, DIRECTORY_SEPARATOR);
$output = rtrim($output, DIRECTORY_SEPARATOR);
if (is_dir($input)) {
$input .= DIRECTORY_SEPARATOR;
$output .= DIRECTORY_SEPARATOR;
foreach (glob($input . "*") as $path) {
$compress_path = str_replace($input, $output, $path);
if (is_dir($path)) {
if (!is_dir($compress_path)) {
$this->mkpath($compress_path);
}
$this->compress_file($path, $compress_path);
}
if (is_file($path)) {
$data = array_map("trim", file($path));
file_put_contents($compress_path, join('', $data));
}
}
}
}
private function mkpath($path) {
return is_dir($path) or ($this->mkpath(dirname($path)) and (mkdir($path, 0777) and chmod($path, 0777)));
}
}
$app = new Compress_Template();
$app->run();
echo "OK!\n";
建议继续学习:
- windows下压缩包在linux解压乱码的解决办法 (阅读:4175)
- 启用memcached压缩注意事项 (阅读:4085)
- php的echo为什么这么慢 (阅读:4064)
- 使用系统命令实现文件的压缩与加密 (阅读:4033)
- MySQL从压缩文件恢复数据 (阅读:3703)
- 前端性能优化之Html压缩 (阅读:3688)
- mod_gzip:Apache的HTTP压缩优化 (阅读:3675)
- 为什么不压缩 HTML (阅读:3481)
- 开源压缩算法Zopfli介绍 (阅读:3489)
- 在服务端合并和压缩JavaScript和CSS文件 (阅读:3206)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
文章信息
- 作者:废墟 <a@anerg.cn> 来源: 废墟
- 标签: 压缩
- 发布时间:2013-05-21 22:59:57
建议继续学习
近3天十大热文
- [41] 界面设计速成
- [33] 如何拿下简短的域名
- [33] Oracle MTS模式下 进程地址与会话信
- [32] 视觉调整-设计师 vs. 逻辑
- [32] 程序员技术练级攻略
- [31] IOS安全–浅谈关于IOS加固的几种方法
- [30] 图书馆的世界纪录
- [30] android 开发入门
- [28] 【社会化设计】自我(self)部分――欢迎区
- [27] 读书笔记-壹百度:百度十年千倍的29条法则