Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT客户端代码中的Collections.sort是否会导致JavaScript膨胀?_Java_Gwt_Arraylist - Fatal编程技术网

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

GWT客户端代码中的Collections.sort是否会导致JavaScript膨胀?,java,gwt,arraylist,Java,Gwt,Arraylist,我们已经采取措施确保在GWT客户机代码中使用List的具体实现,以避免生成过多的JavaScript。(注意:我知道我们可以改为黑名单类型。) 如果我们在客户端使用Collections.sort,这会导致同样的膨胀吗?或者它会认识到我们只将其用于ArrayList并相应地生成代码吗?使用ArrayList而不是List仅在引用那些可序列化的RPC类型时防止膨胀。要实现这一点,请避免在任何RPC接口的参数或返回类型中,或在您定义的任何可序列化类的字段中列出List 在其他任何地方执行此操作(包括

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


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

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

在其他任何地方执行此操作(包括在传递到诸如
Collections.sort
之类的util方法时)都是不必要的-编译器实际上足够聪明,可以在编译时解决这些情况并简化代码

产生这种差异的原因非常简单——让我们把编译器看作三个基本步骤

  • 首先,我们生成我们需要的任何代码(
    GWT.create()
    是GWT说“请为这种类型生成实现”的线索)
  • 然后,因为我们知道运行应用程序可能需要的所有可能的Java代码,所以我们优化了整个项目,并且可以简化
  • 最后,我们将简化/优化的Java转换为JavaScript
序列化程序代码的生成在第一步中进行,而“类型收紧”和“方法调用收紧”优化则在第二步中进行。如果是另一种情况,编译器可能会决定删除一些似乎未使用的代码,但RPC生成代码会在这些代码消失后决定使用它们

因此,在创建RPC接口和可序列化类时,只需要对您的类型进行额外的指定。任何其他地方(如删除Collections.sort)的优化都是不成熟的(也是无用的)