从多个UiBinder引用单个ClientBundle类会花费多少钱?

时间:2011-11-30 18:01:49

标签: gwt uibinder

我有一个ClientBundle,其中包含整个应用程序所需的css资源 - 默认背景颜色,常见布局模式等。

来自GWT的陈述design goal是“对多个ClientBundle资源函数引用相同内容没有任何惩罚”。我是否必须做任何事情以避免处罚并帮助ClientBundle实现这一目标?

一种天真的方法就是添加

<ui:with field="appWideResources"
    type='com.activegrade.client.resources.appwide.AppWideResources' />

位于每个UiBinder文件的顶部。但是,在我的22亿UiBinder文件中,这将创建22亿个AppWideResources实例,每个实例都有不同的冗余混淆等等吗?

1 个答案:

答案 0 :(得分:5)

你可以这样做或通过@UiFactory方法,也不会花费任何额外的费用。 GWT只会实例化一次资源集,并与引用该集合的每个文件共享该单个实例。

“......每次调用GWT.create()ui:with将执行此操作)时,它将实例化一个新对象,但ClientBundle中的所有资源都被初始化为静态字段,所以每个实例只是那些静态字段的一个非常轻量级的“代理”;而GWT编译器最终会优化它,(几乎)就好像你有一个单例实例一样。“ (Thomas Broyer)