0

我想知道 Google 的 Closure Compiler 是如何工作的。例如,我可以让它转换函数调用,例如:

if (MyApp.isArray(...)) {
    // foobar
}

到实际执行:

if ((typeof sthing === 'Object' && sthing.constructor.toString().indexOf("Array") !== -1))

我问这个是因为我有很多包装器可以绑定一些功能,并且我希望 Closure Compiler 将它们转换回具有更少的函数调用。

实际上,一个额外的函数调用是否会使应用程序明显变慢?

4

3 回答 3

2

实际上,一个额外的函数调用是否会使应用程序明显变慢?

很可能不会,但是如果您真的想知道,您只需尝试两个不同的代码示例,看看是否有区别。涉及很多因素(您的系统、您的浏览器、您正在调用的函数等),因此测试是可行的方法。我建议使用Firebug进行分析。

于 2011-01-03T20:00:30.150 回答
2

闭包编译器(在高级模式下)将内联单行函数,或仅调用一次的函数。

显然对于编译器作者来说,在第一种情况下,保存函数调用更经济,并且单行函数通常足够短,以至于与函数调用的长度相似。在第二种情况下,它避免了函数调用并且更短,因此肯定会获胜。

据我所知,它不是多于一行或多次调用的内联函数。这显然是为了避免代码膨胀。

我听说有人说单行函数不是内联的,但我一直看到它们内联。

于 2011-03-10T12:08:37.867 回答
1

我不认为有闭包编译器为你做这件事。它的主要重点是缩小源代码,据我所知,如果它实际上更短,它只会内联这样的函数调用。

于 2011-01-03T19:02:47.293 回答