gpt4 book ai didi

javascript - Closure Compiler 如何使用类型信息来编译更快的 JavaScript?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:47 24 4
gpt4 key购买 nike

谷歌的 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 方法,即使其中一个可能永远不会被调用.如果它知道 xX1 类型,那么它会将方法重命名为 X1$fooX2$foo(或类似的东西)。然后,它可以看到 X2$foo 从未被调用,因此它将它从编译代码中删除。这意味着要下载和解析的代码更少,因此它可以使页面感觉加载得更快,并且 JS 解释器必须保留在内存中的函数更少。

关于javascript - Closure Compiler 如何使用类型信息来编译更快的 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com