我一直想知道为什么 js 压缩器不这样做。假设我有一个像这样的缩小脚本:
(function($){var a=$("a");1<a.length&&10>a.length?alert(a.length):alert($("p").length)})(jQuery);
为什么它不能编译成这样:
(function($,L){var a=$("a");1<a[L]&&10>a[L]?alert(a[L]):alert($("p")[L])})(jQuery,'length');
意思是用[minified key]
改变每次出现的.property
,并将字符串和arg接收器传递给iife
(基本上是我在上面对 .length
所做的)
想象一下,这会将 jQuery 缩小多少 159 个 .length
、62 个 .each
、15 个 .appendChild
等等。只是 .length
本身就可以节省 600 多个字节!
同样使用上面的示例,当您可以通过声明另一个参数在该函数范围内保留空间时,为什么它会在 var 关键字上浪费空间:
(function($,L,a){a=$("a");1<a[L]&&10>a[L]?alert(a[L]):alert($("p")[L])})(jQuery,'length');
另外,既然我有你在,为什么不将整个 jQuery 放入一个 eval 中并节省另外 572 个 function
关键字 (4.5k)?
最佳答案
我想它不想假设除了属性查找之外您还需要变量查找的费用。
如果您使用 Closure Compiler,如果您手动操作,它实际上会撤消这些类型的引用。
最终,如果您使用 gzip,我认为这些混淆加起来并不多。如果在某些情况下它实际上使您的 gzip 版本更大,我不会感到惊讶。
关于javascript - 为什么js压缩器不这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8867274/