为什么缩小或混淆的JavaScript比未压缩的代码表现更差?

Dhe*_*.S. 19 javascript obfuscation performance minify

我看到了使用各种缩小器和混淆器压缩的JavaScript代码的性能报告.令人惊讶的是,除了Closure高级模式之外,在大多数情况下,所有其他minifiers输出的代码都比未压缩的代码更差.我们如何解释?

向下滚动到页面末尾以查看报告.这是截图:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

传说:

  • 蓝色 - YUI压缩机
  • 红色 - 关闭(高级模式)
  • 橙色 - 关闭(基本模式)
  • 格林 - JS Min
  • 紫色 - JS Packer
  • 浅蓝色 - UglifyJS
  • 粉红色 - 未压缩的代码

a b*_*ver 7

首先让我扮演魔鬼的拥护者:代码实际上没有"执行"任何东西(我的意思是没有任何严重,除了JS Packer).它本质上是函数,对象和属性的定义.

JS Packer不生成JavaScript代码,而是生成运行时必须解压缩的压缩文本.这就是为什么它慢得多.使用Advanced Optimization的Google Closure会尽可能替换标识符.因此,在解析脚本时必须具有性能优势.

这就是说可以牺牲代码大小的性能.一个例子是替换truefalse使用!0!1.这取决于JavaScript引擎.它可以在第一次调用之前由引擎优化,之后,在一些调用之后,从不......谁知道;)

新发现

我在此期间进行了一些分析,并意识到我忘记了一件事:垃圾收集.这种影响足以解释脚本和浏览器之间的一些差异(不同的引擎!).

再加上代码没有做太多而且你有东西的事实.在一次测试中,对于未压缩的垃圾收集,CPU时间约为3%,对于JSMin,则为9%(!).这意味着几乎相同的代码完全不同的结果.

甚至更新的发现

当你首先运行JSMin时,它比未压缩的更快.我尝试了几次,总是得到相同的结果.这证实了先前的发现.我现在很自信,我们找到了解决方案.

  • +1代码没有做任何事情.唯一重要的基准是你自己的. (2认同)