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

Ril*_*ark 4 gwt uibinder

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

GWT 规定的设计目标是"对于多个ClientBundle资源函数引用相同内容不会受到惩罚".我是否必须做任何事情以避免处罚并帮助ClientBundle实现这一目标?

一种天真的方法就是添加

<ui:with field="appWideResources"
    type='com.activegrade.client.resources.appwide.AppWideResources' />
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ell 5

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

"...每次调用GWT.create()(它ui:with会做什么)它将实例化一个新对象,但是所有资源ClientBundle都被初始化为静态字段,因此每个实例只是这些静态字段的一个非常轻量级的"代理";并且GWT编译器最终将对其进行优化,(几乎)就好像你有一个单例实例一样." (托马斯布鲁耶)