2014-05-12 73 views
3

我有一個ClientBundle,它定義了一堆TextResourceImageResource元素。GWT中的ClientBundles和代碼分割?

對於我網站上的每個頁面,我計劃設置一個代碼分割點,它將只運行給定頁面的視圖/演示者。

我的問題是,例如我有一個名爲logo()的ImageResource和一個名爲fooJs()的文本資源。我只訪問MyClientBundle.INSTANCE.logo()和MyClientBundle.INSTANCE.fooJs()from a Gwt.runAsync`塊。

其他頁面將訪問MyClientBundle.INSTANCE以加載其他圖像/ textResources,這些圖像/文本資源特定於這些頁面(在它們自己的GWT.runAsync塊內)。但是logo()fooJs只會在一個代碼分割中被引用。

我的問題是,將logo圖像和fooJs textResource只捆綁在代碼分割文件中,還是將它們添加到啓動js中,還是將它們添加到碎片左側?

基本上我想要做的是爲每個頁面分割圖像/視圖/演示者,以減少腳本的初始下載大小。

回答

1

它看起來像GWT編譯器將拆分ClientBundle中的單個資源。

考慮以下模塊:

public class ClientBundleCodeSplittingExample implements EntryPoint { 

    public interface MyResources extends ClientBundle { 
    public static final MyResources INSTANCE = GWT.create(MyResources.class); 

    @ClientBundle.Source("resource1.txt") 
    public TextResource resource1(); 

    @ClientBundle.Source("resource2.txt") 
    public TextResource resource2(); 
    } 

    /** 
    * This is the entry point method. 
    */ 
    public void onModuleLoad() { 
    Window.alert("Resource 1: " + MyResources.INSTANCE.resource1().getText()); 

    GWT.runAsync(new RunAsyncCallback() { 
     @Override 
     public void onFailure(Throwable throwable) { 
     Window.alert("Code download failed"); 
     } 

     @Override 
     public void onSuccess() { 
     Window.alert("Resource 2: " + MyResources.INSTANCE.resource2().getText()); 
     } 
    }); 
    } 
} 

在同一個封裝與不同,易於識別字符串作爲文本文件的內容模塊入口點類名爲resource1.txtresource2.txt 2文本文件。如果使用選項-style PRETTY編譯模塊並檢查生成的JavaScript,則可以看到resource1.txt的內容包含在主模塊javascript中,並且resource2.txt的內容僅包含在將被加載延期的JavaScript中。