GWT客户端代码中的Collections.sort会导致JavaScript膨胀吗?

时间:2014-09-26 15:25:18

标签: java gwt arraylist

我们已采取措施确保我们使用List<>的具体实现在我们的GWT客户端代码中,以避免生成过多的JavaScript。 (注意:我知道我们可以改为黑名单类型。)

如果我们使用Collections.sort客户端,这会导致同样的膨胀吗?或者它是否会认识到我们只将它用于ArrayLists并相应地生成代码?

1 个答案:

答案 0 :(得分:1)

仅将ArrayList代替List 时,可以在将这些类型引用为RPC serializable时防止膨胀。要实现这一点,请避免在任何RPC接口的参数或返回类型中,或在您定义的可序列化的任何类的字段中列出List

在其他地方(包括传递给Collections.sort这样的util方法时)这样做是不必要的 - 编译器实际上足够聪明,可以在编译时简化代码并简化代码。

这种差异的原因非常简单 - 让我们将编译器看作三个基本步骤。

  • 首先,我们生成我们需要的任何代码(GWT.create()是GWT的线索,请说明请生成此类型的实现')。
  • 然后,由于我们知道运行应用程序可能需要的所有可能的Java代码,因此我们优化整个项目,并且可以简化。
  • 最后,我们将简化/优化的Java翻译成JavaScript。

序列化器代码的生成发生在第一步,但是'类型紧缩'和'方法叫紧缩'优化发生在第二步。如果是相反的方式,编译器可能决定删除一些似乎没有使用的代码,但是RPC生成代码决定在它消失后使用它。

因此,在创建RPC接口和可序列化类时,只需 才能对类型进行额外的特定操作。其他任何地方(比如删除Collections.sort)都是过早(无用)的优化。