java环境 + yuicompressor 实现代码压缩优化

来源:互联网 发布:长春招聘网络女主播 编辑:程序博客网 时间:2024/05/29 09:12

        实现前端的代码的压缩优化,不仅是对代码文件量的减负也是对项目走向真正产品实体的必要步聚;所以,对项目而言是提升应用的整体性能、对用户环境减小各种负载、对开发者个人而言也是阻止拿出主义者。

        好了,直奔今天的主题 -- 应用 YUI Compressor 实现代码压缩优化,虽然早已经有了相关的批处理文件、及在线压缩小工具,但本着学习研究的心态,搞懂命令行工作方式还还是有必要滴。

一、压缩 JavaScript 的原理( 其他代码语言相关规则大同小异,具体见官方api : http://yui.github.io/yuicompressor/ )

1、重命名局部变量(YUI Compressor 也可以配置参数,拒绝变量重命名)

比如:

(function(){function add(num1, num2) {return num1 + num2;}})();
进行属标识符替换后:
(function(){function A(C, B) {return C+ B;}})();
再移除额外的空格,最终成了:

(function(){function A(C,B){return C+B;}})();

YUI Compressor 标识符替换仅替换函数名和变量名,那哪些不能被替代呢?

        a)原始值:字符串、布尔值、数字、null 和 undefined。一般来说字符串占的空间最多,而非数字字面量其次(true、false,null,underfinded)。
        b)全局变量:window、document、XMLHttpRequest等等。使用最多的就是 document、window。
        c)属性名,比如:foo.bar。占据的空间仅次于字符串,”.” 操作符无法被代替,且 a.b.c 更加费空间。
        d)关键字。经常被过度使用的关键字有:var、return。最好的优化方法:一个函数仅出现一次 var 和 return 关键字。


对于原始值、全局变量、属性名的优化处理方式大致相同:任何字面量值、全局变量或者属性名被使用超过 2 次(包括2次),都应该用局部变量存储代替。

2、移除代码空白、注释

3、在相同语义的情况下压缩代码,比如去掉末尾分号(Remove Terminator Semicolons),常量替换(Constant Propagation)

        a)object["property"],如果属性名是合法的 JavaScript 标识符(注:合法的 JavaScript 标识符——由一个字母开头,其后选择性地加上一个或者多个字母、数字或下划线)且不是保留字,将优化为: object.property 。
        b){"property":123},如果属性名是合法的 JavaScript 标识符且不是保留字,将优化为 {property:123} (注:在对象字面量中,如果属性名是一个合法的 JavaScript 标识符且不是保留字,并不强制要求用引号引住属性名)。
        c)'abcd/'efgh',将优化为 "abcd'efgh"。
        d)"abcd" + "efgh",如果是字符串相连接,将优化成 "abcdefgh"(注:所有在使用 YUI Compressor 的前提下,对于脚本中的字符串连接,使用连接符 “+” 的效率和可维护性最高)。

也有部分情况下是禁止使用标识符替换的:
        a)使用 eval() 函数。解决方法:不使用或者创建一个全局函数封装 eval()。
        b)使用 with 语句。解决方法:方法同上。

        c)JScript 的条件注释。唯一解决的方法:不使用。

由于 YUI Compressor 是建立在 rhino interpreter 基础上的,所以上述所有的优化都是安全的。

二、命令行版

1、Java环境配置——Windows7(32位)

http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、下载 .jar包

https://github.com/yui/yuicompressor/releases


3、标准使用yui compressor 语句格式:

e:\>java -jar .\yuicompressor-2.4.8.jar -o .\Page-v1-min.js .\Page.js --charset utf-8

几经尝试出来 ,路径问题很重要:

压缩文件需与 .jar包 位于同一磁盘符,这样以保证使用相对路径,来指定压缩文件及压缩生成的 .min文件位置(直接引用绝对路径及不在同一盘符一直不成功);



三、批处理、二进制执行小工具,有兴趣朋友可以自己参考拿来用

开发者自定义可视化版

http://cloud.github.com/downloads/tinyms/jscompressor/JsCompressor.exe  
在线工具(开发者 甘泉) ,显示压缩的shell命令行,方便查看操作原理;
http://ganquan.info/yui/?hl=zh-CN
淘宝UED前端制作的批处理工具
http://www.zjgsq.com/175.html

另:这里还小注一下更具自定功能的压缩方式  Jasob ,经过小尝试它给我的最大体验是能够直接明确区分开来全局函数 \ 变量,来进行混淆个性化的名称定义 + 内置字典批量定义,所以它的混淆效果是完全不可逆的;(遗憾就是我也没有找到它的破解、注册码,只能有30天的试用)
http://www.jasob.com/Downloads.html


---------------------------------------------------------------------------------------------------------------------------------------------------

20141208

---------------------------------------------------------------------------------------------------------------------------------------------------

Online JavaScript/CSS Compression Using YUI Compressor
http://refresh-sf.com/yui/


        

0 0