谷歌的 Closure Compiler编译成更高效的 JavaScript。我可以想象几个简单的例子,比如 Closure Compiler 通过直接调用函数或用文字替换常量来减少调用堆栈。但是 documentation更进一步说,
"The Closure Compiler can use data type information about JavaScript variables to provide enhanced optimization and warnings."
我的理解是类型化语言有两个好处:1) 类型检查可以在编译期间捕获错误——我可以看到 Closure Compiler 如何模拟这种行为——以及 2) 程序实际上执行得更快,因为它被编译成另一个语言(比如 Java 到 Java 字节码)。使用 Closure Compiler,输出仍然是 JavaScript。如何根据类型信息进行优化?
最佳答案
一个例子是 disambiguateProperties 功能,描述于 http://closuretools.blogspot.com/2011/01/property-by-any-other-name-part-3.html
如帖子所述,这允许编译器选择较短的属性名称。它还允许编译器消除更多的死代码。假设您在代码中调用了 x.foo()
,并且有两种不同的类型都具有 foo
方法:
X1.prototype.foo = function() {
// Lots and lots of code...
};
X2.prototype.foo = function() {
// Lots and lots of code...
};
如果编译器不知道 x
是什么类型,它必须在代码中保留两个长 foo
方法,即使其中一个可能永远不会被调用.如果它知道 x
是 X1
类型,那么它会将方法重命名为 X1$foo
和 X2$foo
(或类似的东西)。然后,它可以看到 X2$foo
从未被调用,因此它将它从编译代码中删除。这意味着要下载和解析的代码更少,因此它可以使页面感觉加载得更快,并且 JS 解释器必须保留在内存中的函数更少。
关于javascript - Closure Compiler 如何使用类型信息来编译更快的 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616176/