http://closure-compiler.appspot.com/home
(function(){
var somevar = 'somevar';
this.each(function(){
var minify_var = {
method1: somevar + '1',
method2: somevar + '2',
method3: somevar + '3',
method4: somevar + '4',
method5: somevar + '5'
};
alert(minify_var);
});
})();
这样的代码最小化为:
(function(){this.each(function(){alert({method1:"somevar1",method2:"somevar2",method3:"somevar3",method4:"somevar4",method5:"somevar5"})})})();
它的长度(+11个符号)肯定大于:
(function(){var a="somevar";this.each(function(){alert({method1:a+"1",method2:a+"2",method3:a+"3",method4:a+"4",method5:a+"5"})})})();
问题是,我们有两个变量,但只有一个。
实际上,对于小的脚本来说这还不错,但是对于大型脚本却可能会造成伤害。
添加了第一个变量以使缩小的代码更小一些,但Google忽略了它。
它还忽略了其他大多数此类大小优化技巧。
可以解决吗?
这个问题是关于Google Closure,而不是JavaScript模式。
最佳答案
编译器假定将文件提供给用户时会将其压缩,因此它针对压缩文件大小(而不是未压缩大小)进行优化。
我测试了两个版本的代码。
版本(将a
处理为全局变量可防止以后自动将其串联):
(function () {
a = 'somevar';
this.each(function () {
var minify_var = {
method1: a + '1',
method2: a + '2',
method3: a + '3',
method4: a + '4',
method5: a + '5'
};
alert(minify_var);
});
})();
产生的缩小代码:(function(){a="somevar";this.a(function(){alert({b:a+"1",c:a+"2",d:a+"3",e:a+"4",f:a+"5"})})})();
大小:97个字节(已压缩 95 字节)。版本B (与上面相同,但是
a
是局部变量,因此编译器会对其进行优化):(function () {
var a = 'somevar';
this.each(function () {
var minify_var = {
method1: a + '1',
method2: a + '2',
method3: a + '3',
method4: a + '4',
method5: a + '5'
};
alert(minify_var);
});
})();
产生的缩小代码:(function(){this.a(function(){alert({b:"somevar1",c:"somevar2",d:"somevar3",e:"somevar4",f:"somevar5"})})})();
大小:110个字节(已压缩 89个字节)。因此,第二个版本未压缩时较大,但是压缩时较小,而较小,因为变量声明消失了,并且gzip将重复部分压缩到大致相同的空间,而不管重复文本有多长。
这是FAQ的条目:
关于javascript - Google Closure中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15848174/