最近遇到js压缩、混淆和加密的问题,特意找了些资料看了下,找到了一篇博客总结比较到位,搬过来学习下,主要是自己记笔记,可以直接去原文看,我这里只记录(复制粘贴)重点。
原文地址:https://www.cnblogs.com/flyrui316/p/5002320.html
1.先看几个定义:
压缩:删除 Javascript
代码中所有注释、跳格符号、换行符号及无用的空格,从而压缩 JS
文件大小,优化页面加载速度。
混淆:经过编码将变量和函数原命名改为毫无意义的命名(如function(a,b,c,e,g)
等),以防止他人窥视和窃取 Javascript
源代 码,也有一定压缩效果。
加密:一般用eval
方法加密,效果与混淆相似,也做到了压缩的效果。
从定义中可以看出,压缩的主要目的是消除注释等无用字符,达到精简 js
代码,减小js
文件大小的目的,这也是页面优化的一种方式;而混淆和加密的目的比较接近,都是为了防止他人直接查看源码,对代码(如重要的api
等)起保护作用,但这也只是增加了阅读代码的代价,也就是所谓的防君子不防小人。但是当混淆和加密联合使用时,如先混淆在加密(或者先加密再混淆)时,破解时间就会增加。
2.那么问题来了,浏览器是怎么解析混淆和加密后的js代码的?
其实变量名只要是Unicode字符就行了,对于js引擎来说都是一样的,只是人类觉得他们不同而已。
3.js
压缩工具
其实
js
的压缩工具网上有很多,在线和安装版的都有,文章中使用的是HDS JSObfuscator v2.13
绿色版。
4.注意事项
源js
文件一定要按照规范编写,分号,注释符,var等都要规范,否则很容易出错。