首页 > 解决方案 > 我应该多次运行 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);

它生成了以下编译代码:

var a = {b:1, a:2};
1 == a.b ? console.log(a.a) : alert(a.a);

但是当我将编译后的代码放回 Closure Compiler时,它设法生成了一个更短的版本:

console.log(2);

这是否意味着我应该在我的代码上多次运行 Closure Compiler 以确保获得最佳优化?这样做有什么潜在的问题吗?

标签: javascriptgoogle-closure-compiler

解决方案


ADVANCED使用优化第二次通过编译器运行编译后的代码是非常危险的。编译器不保留原始类型注释,并且代码打印机将在可能的情况下将括号访问转换为点访问(obj['foo']obj.foo)。然后,输出代码很可能会使编译器做出的基本假设无效。

可以使用SIMPLE优化通过编译器重新运行输出代码。但是,您很可能会看到使用这种方法的大幅递减收益。换句话说:可能几乎没有改善。


推荐阅读