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)
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.html2、下载 .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
---------------------------------------------------------------------------------------------------------------------------------------------------
http://refresh-sf.com/yui/
- java环境 + yuicompressor 实现代码压缩优化
- 性能优化之YUICompressor压缩JS、CSS
- java+python+YuiCompressor实现多css js的合并与压缩
- 使用yuicompressor.jar对js/css文件代码压缩
- 实现Java代码压缩解压
- JAVA图片压缩代码实现
- java代码实现图片压缩
- 使用yuicompressor 压缩js, CSS
- 使用yuicompressor 压缩js, CSS
- Java代码优化实现
- 前端部署ant+yuicompressor文件压缩+获取版本号+SSH发布(部分代码)
- 算法代码实现之Union-Find,Java实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- 用Java代码实现文件的压缩
- java代码实现对图片压缩大小
- Java实现图片压缩代码,图片大小转换
- Java实现多文件压缩和解压缩代码(未测试)
- Vim 中调用 YUICompressor 压缩 js, css
- ant和yuicompressor 压缩css、js方案
- POJ1142——Smith Numbers
- 提高用户体验:30秒钟评价一个网页
- MyMFC(8)逃跑按钮 CNewButton
- 别再浪费时间了!如何从细节上真正节省用户的时间
- mysql 中 时间和日期函数
- java环境 + yuicompressor 实现代码压缩优化
- Android系统自带样式(android:theme)
- debug时遇到source not found
- 内连接与外连接的区别
- 嵌入式 linux下sqlite的C编程之sqlite3_get_table
- 滚动触发的翻转式文字引用效果
- C++ Builder中写入控件Items中TSrings类型数据的方法
- 【Redis 1】Redis数据库的学习与实践—安装与部署
- opengl入门系列2- 模型视图矩阵变换