【发布时间】:2014-02-06 23:16:27
【问题描述】:
Google 的 Closure Compiler 编译为更高效的 JavaScript。我可以想象一些简单的例子,例如 Closure Compiler 通过直接调用函数或用字面量替换常量来减少调用堆栈。但documentation 走得更远,说,
"闭包编译器可以使用关于 JavaScript 的数据类型信息 变量以提供增强的优化和警告。”
我的理解是类型化语言有两个好处:1) 类型检查可以在编译期间捕获错误——我可以看到 Closure Compiler 如何模拟这种行为——以及 2) 程序实际上执行得更快,因为它被编译到另一个语言(比如 Java 到 Java 字节码)。使用 Closure Compiler,输出仍然是 JavaScript。如何根据类型信息进行优化?
【问题讨论】:
-
在确认是否(不需要)需要之后,它可能会删除多余的显式类型检查。不过我不知道。
-
一个例子是内联代码。假设您有一些助手
isUndefined,它可能内联typeof x === "undefined"。它还可以删除死代码并可以简化不良代码 -
@megawac 内联本身就是一个强大的优化,也是所有优化之母,但它需要的不仅仅是类型信息:它需要静态解析函数引用。这并不是说闭包编译器不能或不会这样做,而是 type 信息不允许内联。
-
一个例子:它可以删除对数组元素的不需要的类型更改,这会导致围绕可以存储例如浮点数组的汇编代码低级数组重新装箱而不是混合数组。阅读更多关于 V8 优化的信息。
标签: javascript google-closure-compiler