我一直想知道为什么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');
将每个出现的
.property
替换为[缩写键]
,并将字符串和参数接收器传递给iife
(基本上就是我在上面使用.length
所做的)。 想象一下,用159个.length
,62个.each
,15个.appendChild
等可以压缩多少jQuery。仅仅是.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)?