我们已采取措施确保我们使用List<>的具体实现在我们的GWT客户端代码中,以避免生成过多的JavaScript。 (注意:我知道我们可以改为黑名单类型。)
如果我们使用Collections.sort客户端,这会导致同样的膨胀吗?或者它是否会认识到我们只将它用于ArrayLists并相应地生成代码?
答案 0 :(得分:1)
仅将ArrayList
代替List
时,可以在将这些类型引用为RPC serializable时防止膨胀。要实现这一点,请避免在任何RPC接口的参数或返回类型中,或在您定义的可序列化的任何类的字段中列出List
。
在其他地方(包括传递给Collections.sort
这样的util方法时)这样做是不必要的 - 编译器实际上足够聪明,可以在编译时简化代码并简化代码。
这种差异的原因非常简单 - 让我们将编译器看作三个基本步骤。
GWT.create()
是GWT的线索,请说明请生成此类型的实现')。 序列化器代码的生成发生在第一步,但是'类型紧缩'和'方法叫紧缩'优化发生在第二步。如果是相反的方式,编译器可能决定删除一些似乎没有使用的代码,但是RPC生成代码决定在它消失后使用它。
因此,在创建RPC接口和可序列化类时,只需 才能对类型进行额外的特定操作。其他任何地方(比如删除Collections.sort)都是过早(无用)的优化。