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


    我们知道,在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!
    ";
     
  • 相关阅读:
    Oracle 学习笔记4 SQL语言基础
    Oracle 学习笔记3 Sql Plus 命令
    连接扩展屏后,桌面上的图标自动跑到扩展屏上去了
    Oracle数据库基础知识
    ORACLE 学习笔记 2 Oracle 11g 体系结构
    EXCEL 连接Oracle 数据库
    虚拟机
    截取默写数据库无法识别的字符前几位的值
    c#的SerialPort在多线程环境下需要加锁
    32. 最长有效括号
  • 原文地址:https://www.cnblogs.com/yhdsir/p/4886069.html
Copyright © 2020-2023  润新知