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.
我密切相关的问题是:
以下假定您将该接口用作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)
我刚刚根据webAppCreator生成的示例应用程序进行了测试,但我添加了 3 个简单的服务,这些服务返回 或List<String>
,ArrayList<String>
具体取决于构建。
结果是,与任意混合返回类型相比,使用所有服务可以从已编译的 javascript 中ArrayList<String>
节省大约 5Kb 。
这证明节省是真实的并且是针对每个应用程序(而不是针对每个服务)的。
它还显示它节省了多少(在本例中)。