Car*_*nde 6 javascript google-closure-compiler
我尝试在高级优化模式下将以下JavaScript代码放入Closure Compiler Web界面:
function f(some_object) {
if (some_object.foo == 1) {
console.log(some_object.bar);
} else {
alert(some_object.bar);
}
}
var my_object = {foo: 1, bar: 2};
f(my_object);
Run Code Online (Sandbox Code Playgroud)
它生成了以下编译代码:
var a = {b:1, a:2};
1 == a.b ? console.log(a.a) : alert(a.a);
Run Code Online (Sandbox Code Playgroud)
但是,当我将编译后的代码放回Closure Compiler时,它设法生成了更短的版本:
console.log(2);
Run Code Online (Sandbox Code Playgroud)
这是否意味着我应该在我的代码上多次运行Closure Compiler以确保我能够获得最佳的优化?这样做有什么潜在的问题吗?
使用优化第二次通过编译器运行编译后的代码是非常危险的ADVANCED。编译器不会保留原始类型注释,并且代码打印机将尽可能将括号访问转换为点访问(obj['foo']to obj.foo)。输出代码很可能会使编译器所做的基本假设无效。
可以使用SIMPLE优化通过编译器重新运行输出代码。然而,使用这种方法您很可能会看到收益大幅递减。换句话说:可能改进很小。