GWT GIN将多个ClientBundle与ImageResource绑定在一张图片中,以便快速加载应用程序

时间:2013-03-28 06:00:49

标签: java gwt browser-cache gin clientbundle

我在我的应用程序中使用GWT。对于缓存图片我使用ClientBundle和ImageResource。我有很多像这样的ClientBundles:

public interface MenuBundle extends ClientBundle { 

  @Source(background.png) 
  ImageResource background();

  @Source(image_bg.png) 
  ImageResource image_bg();

...

}

和数百个ClientBundles使用相同的方法:

    public interface House1 extends House, ClientBundle { 

      @Source(house1/pic1.png) 
      ImageResource pic1();

      @Source(house1/pic2.png) 
      ImageResource pic2();

      @Source(house1/pic3.png) 
      ImageResource pic3();

    ...

    }

    public interface House2 extends House, ClientBundle{ 

      @Source(house2/pic1.png) 
      ImageResource pic1();

      @Source(house2/pic2.png) 
      ImageResource pic2();

      @Source(house2/pic3.png) 
      ImageResource pic3();

    ...

    }

   public interface House { 

      ImageResource pic1();

      ImageResource pic2();    

      ImageResource pic3();

    ...

    }

结果我在服务器上有数百张图片,如“* .cache.png”。 为了快速加载,我需要更少的图片。为此我找到了决定:

public class ClientBundleModule extends AbstractGinModule {

 @Override
 protected void configure() {
  bind(MenuBundle.class).to(ClientBundlePack1.class);
  bind(NatureFuture.class).to(ClientBundlePack1.class);
  ...
  bind(House1.class).to(ClientBundlePack2.class);
  bind(House2.class).to(ClientBundlePack2.class);
  bind(House3.class).to(ClientBundlePack2.class);
  ...
 }
}

public interface ClientBundlePack1 extends MenuBundle, NatureFuture, ... {
}

public interface ClientBundlePack2 extends House1, House2, House3, ... {
}

还有Ginjector,......但问题是:

MenuBundle,NatureFuture和ClientBundlePack1中的其他类编译成一个大图(很好),但是House1,House2,House3和其他House不能编译成一幅大图(这很糟糕)。

众议院在一张照片中编辑每个班级的房子。我在java方式中看到了扩展实现的问题,使用像pic1这样的相同方法而不是使用所有方法pic1。

但我需要在一张照片中加入所有的房子。有GIN的设置,注释来做到这一点。或者可能有其他方式加入所有房屋?但是我不能重写House的代码,它会打破我的应用程序的架构。预加载后我立即需要所有房屋,没有“延迟加载”。

感谢。

0 个答案:

没有答案