顾名思义,

  • 压缩:Compress,是对JS文件进行压缩,一般是去除JS脚本中的空格、回车换行、注释。可以使用格式化工具对压缩后脚本进行格式化。
  • 混淆:Munge,Obfuscate,Confuse,,是对函数中的局部变量重新命名,使得脚本比较难以阅读。即使使用格式化工具对混淆后脚本进行格式化,因为局部变量随机化了,也比较难以阅读,但依然容易理解。
  • 加密:Encrypt,与混淆不同,采用加密算法,对脚本进行加密,使得脚本从根本上很难阅读理解。即使使用格式化工具对加密后脚本进行格式化,从根本上也很难阅读理解。从而保护了您的代码与辛勤劳动。

我们知道,JS是解释性语言,需要下载到浏览器中运行。 一般有如下问题:


  • 文件大小影响下载量与下载速度,进而影响用户体验。 压缩可以减小JS文件尺寸,提高下载速度。
  • 在浏览器中,打开开发者工具,所有的JS代码即一目了然,为了保护自己的劳动成果,一般可以对JS代码进行混淆
  • 但混淆并不能彻底保护您的代码,因为混淆只能做到对局部变量重新机命名,在整个代码范围内,还是比较容易理解。
    而且针对一些涉密性(如秘钥)、规范性问题,混淆并不能解决问题。
    为了最大限度保护您的代码,最好采用加密手段,这样可以保护您的逻辑,秘钥、以及规避安全扫描设定的一些准则(一些第三方脚本也可能轻度违反了这些规则,因而造成无法通过一些行业的安全标准)。

除此之外,我们的这款工具,还能针对如下代码做特殊处理:


  • debugger;
  • alert(...); 弹窗调试,调试阶段完成后,容易被程序员疏忽。例如:function test(){ alert(1); }将可能 (根据高级选项中的策略)转换成function test(){window.console&&console.log(1)};如果您确实想弹出alert提示,请编写一个alert的包装函数,例如myAlert。
  • 发现语法错误: 如果存在语法错误,将提示具体错误所在的行、列。例如:
    function (]{ }这样的代码,提交处理后,将给出如下提示:
    Line 1,Col 11 missing formal parameter:function (]{ }这比采用“分块注释排除法”定位错误来得快得多。
  • eval等的处理: eval函数为JS提供了强大的动态解析能力,特别在一些框架性代码中可能用到。
    但是很多安全扫描软件视eval不安全(eval也确实不安全)。
    类似的安全扫描问题,而你又不可避免这些代码,那么可以通过加密脚本来避开扫描。
  • 受保护的标识符的处理: 有时,我们不想某些特定的标识符被混淆,例如$,jQuery,angularJS框架的注入组件(以$开头,例如$scope,$log,$state)等,
    这时,我们可以通过在高级选项下,提供需要受保护的标识符列表,或者标识符正则表达式列表,这些标识符将不被混淆。
    涨知识: angularJS编程实践中,注入组件的最佳写法如下:
    app.controller('MyController',['$scope','$log','$state',function($scope,$log,$state){ //TODO }]);不推荐下列写法(因为$scope,$log,$state被混淆后,angularJS将报出错误。这种情况,只能通过提供受保护的标识符来避免,比较麻烦):app.controller('MyController', function($scope,$log,$state){ //TODO });