压缩
提高网络传输性能的方法之一是把js文件减小,减少传输量(其实现在带宽已经比10年前好很多,1M代码压缩到400KB,用户感觉没有那么明显)
压缩怎么反混淆,听起来有点不可思议,诚然,压缩去掉空格和注释,是混淆手段才对,实际上压缩在很多方面能帮助我们优化混淆后的代码(注意,不能直接反混淆代码,反混淆没有这么简单)
举例:比如压缩可以优化代码的if条件,让代码变得更精简,减少冗余的代码量。
压缩常用工具有
- 支持多种算法的web工具
- Uglifyjs(下面主要介绍)
- YUI compressor(代码不规范的时候问题很多)
- 站长工具
- babili
- JSPacker
- JsMin
uglifyjs 安装和使用
-
安装node.js,就不再介绍了, 百度一下一大把.
-
安装uglifyjs
npm install uglify-js -g
- 使用uglifyjs压缩input.js,压缩结果为input.min.js
uglifyjs input.js -o input.min.js
uglifyjs2压缩部分详解
基于AST对代码大小进行优化的树型变换器。主要优化的方式有:
- 连接连续的 var/const语句
- 连续简单语句转逗号操作符连接的语句
- 删除无用的代码和变量
- 优化条件语句
- 计算常量表达式
- 去掉不可达的代码
- 等等
调用方式
ast = UglifyJS.parse(code);
ast.figure_out_scope();
compressor = UglifyJS.Compressor({ ...compressor_options... });
ast = ast.transform(compressor);
code = ast.print_to_string(); // 获取压缩结果
默认参数在大多数情况下获得最好的压缩效果,推荐的参数如下:
sequences : true, // 逗号表达式连接短句
properties : true, // 优化属性获取方式 a["foo"] → a.foo
dead_code : true, // 删除不可达代码
drop_debugger : true, // 丢弃调试代码
unsafe : false, // 部分不安全的优化 (see below)
conditionals : true, // 优化条件表达式
comparisons : true, // 优化比较
evaluate : true, // 计算常量表达式
booleans : true, // 优化二进制表达式
loops : true, // 优化循环
unused : true, // 丢弃无用的代码
hoist_funs : true, // hoist function declarations
hoist_vars : false, // hoist variable declarations
if_return : true, // optimize if-s followed by return/continue
join_vars : true, // join var declarations
cascade : true, // try to cascade `right` into `left` in sequences
side_effects : true, // drop side-effect-free statements
warnings : true, // warn about potentially dangerous optimizations/code
global_defs : {} // 全局定义
全局声明
这个功能可以用于按条件丢弃代码,例如,如果你这样传入:
global_defs: {
DEBUG: false
}
压缩器会认定这是一个常量,并且丢弃如下不可达的代码:
if (DEBUG) {
...
}
这个可以用于丢弃一些只有开发版本使用的代码,使之在发布环境中不可见。
在早期的UglifyJS版本中,你要做类似的定义需要传入一个AST树,但是在版本2中,不再需要如此,仅仅在全局定义中传入JS的常量。
举例在反混淆中的实战举例
![](https://img.haomeiwen.com/i6262276/ebd6d575b12e435f.png)
![](https://img.haomeiwen.com/i6262276/a1bc2e37fde7edd9.png)
![](https://img.haomeiwen.com/i6262276/c3f5868c7515cdc4.png)
其他例子
![](https://img.haomeiwen.com/i6262276/8f7db3f4610edf0f.png)
![](https://img.haomeiwen.com/i6262276/9afe58615af05410.png)
![](https://img.haomeiwen.com/i6262276/545efdb9dc6b64d2.png)
![](https://img.haomeiwen.com/i6262276/2e585f1383ca64e9.png)
![](https://img.haomeiwen.com/i6262276/e11c43745c69b367.png)
网友评论