我尝试将以下JavaScript代码放入高级优化模式的Closure Compiler web interface中:
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);
它生成了以下编译代码:
var a = {b:1, a:2};
1 == a.b ? console.log(a.a) : alert(a.a);
但是当我把编译好的代码back into the Closure Compiler放进去时,它设法产生了更短的版本:
console.log(2);
这是否意味着我应该在我的代码上多次运行Closure Compiler以确保我能够获得最佳的优化?这样做有什么潜在的问题吗?
使用ADVANCED
优化第二次通过编译器运行编译的代码是非常危险的。编译器不保留原始类型注释,代码打印机将尽可能将括号访问转换为虚线访问(obj['foo']
到obj.foo
)。输出代码很可能会使编译器的基本假设无效。
可以使用SIMPLE
优化通过编译器重新运行输出代码。但是,通过这种方法,您很可能会看到收益大幅减少。换句话说:可能很少有改进。