2012-01-18 46 views
3

我注意到在浏览我编译的GWT代码时,有许多调用来清空$$ init_nn函数,例如下面的代码,其中$$ init_1005有一个空函数体。最初是否有$$ init_1005中的一些代码被优化了?它现在用于任何目的吗?空函数和对它们的调用可以被消除吗?
已编译的GWT代码中对象的实例化

感谢

function $$init_1005() { 
} 
... 

function TreeSet_0(c){ 
    AbstractSet_0.call(this); 
    $$init_1005(); // <-- Call to empty function 
    isNull(c)?(this.map = new TreeMap_0):(this.map = new TreeMap_1(c)); 
} 
+0

它可能是一个存根,以后要用另一个函数替换吗?就像动态链接库中的占位符一样? – 2012-01-18 20:06:16

+1

在PRETTY中进行编译时,确保将优化一直向上 - 默认情况下,编译器会以PRETTY风格降低优化级别。 – 2012-01-18 21:45:19

回答

1

至于我记得,GWT使用$$ init_函数来初始化对象字段,当他们在声明 例如直接初始化为:

public class Test { 
final String value = "1"; 
final String value2= "2"; 
} 

GWT将创建这样的功能:

function $$init_55(this$static) { 
this$static.value = "1"; 
this$static.value2 = "2"; 
} 

通常它总是在内衬或删除,如果它是空的,但如果关闭优化(如标志-optimize 0或-draftCompile)它将停留在那里。

其中一个可能的原因可能是GWT没有以相同的方式优化所有的代码。据我记得,它试图尽可能地优化一些部分,对于其他部分,它只做了一些基本的优化。

+0

将样式设置为PRETTY时,优化大部分都会关闭,这有助于提高可读性,除非您正在优化的bug基于... – 2012-01-18 23:47:37

+1

刚刚尝试过我的GWT项目(GWT 2.4.0),找不到一个$编译JS中的$ init,除非使用标志-draftCompile或-optimize 0.确实,某些优化在PRETTY模式下被关闭,但通常在PRETTY模式下死代码删除和内联工作与OBFUSCATED模式下相同。至少当我发现这个优化有一些bug时,我发现它们都处于PRETTY和OBFUSCATED模式。 – jusio 2012-01-19 00:43:26