IT技术博客大学习 共学习 共进步

项目中对模板和js,css文件进行压缩的处理类

废墟 2013-05-21 22:59:57 浏览 4,524 次

我们知道,在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. windows下压缩包在linux解压乱码的解决办法 (阅读 5,305)
  2. php的echo为什么这么慢 (阅读 5,223)
  3. 使用系统命令实现文件的压缩与加密 (阅读 5,185)
  4. 启用memcached压缩注意事项 (阅读 5,124)
  5. Android设计中的.9.png (阅读 4,904)
  6. MySQL从压缩文件恢复数据 (阅读 4,682)
  7. 前端性能优化之Html压缩 (阅读 4,645)
  8. 开源压缩算法Zopfli介绍 (阅读 4,464)
  9. mod_gzip:Apache的HTTP压缩优化 (阅读 4,383)
  10. 为什么不压缩 HTML (阅读 4,344)