Mar*_*ark 2 javascript jquery minify google-closure
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);
});
})();
Run Code Online (Sandbox Code Playgroud)
像这样的代码缩小为:
(function(){this.each(function(){alert({method1:"somevar1",method2:"somevar2",method3:"somevar3",method4:"somevar4",method5:"somevar5"})})})();
Run Code Online (Sandbox Code Playgroud)
这个长度肯定比(+11个符号)更大:
(function(){var a="somevar";this.each(function(){alert({method1:a+"1",method2:a+"2",method3:a+"3",method4:a+"4",method5:a+"5"})})})();
Run Code Online (Sandbox Code Playgroud)
问题是,我们有两个变量,但有一个变量.
实际上它对于一个小脚本来说并不坏,但是对于一个大脚本可能会受到伤害.
添加第一个变量以使缩小的代码更小,但谷歌忽略它.
它也忽略了大多数像这样的其他大小优化技巧.
可以修复吗?
这个问题是关于Google Closure,而不是JavaScript模式.
编译器假定文件在向用户提供时将被gzip压缩,因此它优化了压缩文件大小而不是未压缩大小.
我测试了两个版本的代码.
版本A(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);
});
})();
Run Code Online (Sandbox Code Playgroud)
产生的缩小代码:
(function(){a="somevar";this.a(function(){alert({b:a+"1",c:a+"2",d:a+"3",e:a+"4",f:a+"5"})})})();
Run Code Online (Sandbox Code Playgroud)
大小:97字节(gzip压缩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);
});
})();
Run Code Online (Sandbox Code Playgroud)
产生的缩小代码:
(function(){this.a(function(){alert({b:"somevar1",c:"somevar2",d:"somevar3",e:"somevar4",f:"somevar5"})})})();
Run Code Online (Sandbox Code Playgroud)
大小:110字节(gzip压缩89字节).
所以第二个版本是未压缩的更大版本,但是当它被gzip压缩时它变小了,因为变量声明消失了,gzip将重复部分压缩到大致相同的空间,而不管重复文本有多长.
以下是常见问题解答中的条目:
Closure Compiler内联我的所有字符串,这使我的代码大小更大.为什么这样做?
大多数人通过查看两个未压缩的JavaScript文件来比较代码大小.但这是一种误导性的查看代码大小的方法,因为您的JavaScript文件不应该是未压缩的.应该使用gzip压缩.
Closure Compiler假设您正在使用gzip压缩.如果你不这样做,你应该.配置服务器以gzip代码是您可能执行的最有效和最简单的优化之一.gzip算法通过尝试以最佳方式对字节序列进行别名来工作.手动别名字符串几乎总是使压缩的代码大小更大,因为它颠覆了gzip自己的别名算法.所以Closure Compiler会(几乎)总是内联你的字符串,因为这会使你的压缩代码更小.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |