通过使用具体类而不是接口来减少编译的js的大小

Boh*_*ian 5 size gwt class abstract

我已经读过GWT,指定返回具体实现的方法,例如:

public ArrayList<String> getList();
Run Code Online (Sandbox Code Playgroud)

而不是通常首选的"抽象接口",例如:

public List<String> getList();
Run Code Online (Sandbox Code Playgroud)

结果在GWT产生编译JavaScript文件一个较小的,因为客户端(即JS)代码不必满足所有已知的接口的实现(在的例子中List,客户端代码必须能够处理LinkedList,ArrayList,Vector,等),因此它可以通过不编译未使用的实现来优化js.

我密切相关的问题是:

  • 这是真的?(以下问题假设真的)
  • 是使用接口还是每个应用程序的每类优化?即
  • 我是否只看到重构一个课程的好处?要么
  • 一旦所有客户端类都被重构为不使用接口,我才会看到一个好处吗?

mxr*_*xro 6

以下假定您将该接口用作GWT RPC服务签名的一部分.我想如果你不在GWT RPC服务的签名中使用接口,那么使用类而不是接口的效果应该是最小的(例如,GWT编译器将只编译已使用的实现)

  • 这是真的?(以下问题假设是真的)

是的,当GWT编译器"更好地"知道哪些类可能从服务器发送到客户端时,它的输出会变小.

  • 是使用接口还是每个应用程序的每类优化?即

如果是GWT RPC,则按应用程序.

  • 我是否只看到重构一个课程的好处?

是的,如果接口需要包含许多类的代码,则实现替换的一个接口可以将生成的代码大小减少几kb.

但是,除了使用实现而不是接口之外,还可以在模块定义文件中定义类的"黑名单",以明确规避在生成的代码中包含实现:类似于

<extend-configuration-property name="rpc.blacklist"
    value="-java.util.ArrayList" />  
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 2

我刚刚根据webAppCreator生成的示例应用程序进行了测试,但我添加了 3 个简单的服务,这些服务返回 或List<String>ArrayList<String>具体取决于构建。

结果是,与任意混合返回类型相比,使用所有服务可以从已编译的 javascript 中ArrayList<String> 节省大约 5Kb 。

这证明节省是真实的并且是针对每个应用程序(而不是针对每个服务)的。

它还显示它节省了多少(在本例中)。