2016-07-15 571 views
0

我是GWT和GWTP的新手。我知道什麼是GWT代碼拆分和GWTP代理代碼拆分。我已經紅:@ProxyCodeSplit它的工作原理是什麼?

http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html http://dev.arcbees.com/gwtp/core/presenters/creating-places.html

我認爲我理解這一點。所以我喜歡用。:

我有Administration panel的應用程序,只有部分用戶可以訪問。所以沒有必要爲所有人下載Administration panel相關的代碼。因此,在Administration Presenter我添加@ProxyCodeSplit像如下:

public class AdminAreaPresenter extends Presenter<AdminAreaPresenter.MyView, AdminAreaPresenter.MyProxy> { 
    @ProxyCodeSplit 
    @NameToken(Routing.Url.admin) 
    @UseGatekeeper(IsAdminGatekeeper.class) 
    public interface MyProxy extends TabContentProxyPlace<AdminAreaPresenter> {} 

    @TabInfo(container = AppPresenter.class) 
    static TabData getTabLabel(IsAdminGatekeeper adminGatekeeper) { 
     return new MenuEntryGatekeeper(Routing.Label.admin, 1, adminGatekeeper); 
    } 

    public interface MyView extends View {} 

    AppPresenter appPresenter; 

    @Inject 
    AdminAreaPresenter(EventBus eventBus, MyView view, MyProxy proxy, AppPresenter appPresenter) { 
     super(eventBus, view, proxy, AppPresenter.SLOT_TAB_CONTENT); 
     this.appPresenter = appPresenter; 
    } 
} 

在其他的演講者我有@ProxyStandard而不是@ProxyCodeSplit。 。 enter image description here

,你可以:在應用程序中打開Administation Panel

enter image description here

和:

我已經運行的應用程序並登錄,然後我打開Network標籤在Chrome的開發者控制檯看,沒有新的資源添加到應用程序。

我的主應用程序發佈者AppPresenter實現從com.gwtplatform.mvp.client.proxy接口AsyncCallStartHandler, AsyncCallFailHandler, AsyncCallSucceedHandler。我覆蓋這些方法:

@ProxyEvent 
@Override 
public void onAsyncCallStart(AsyncCallStartEvent event) { 
    Window.alert("Async start"); 
    getView().setTopMessage("Loading..."); 
} 
@ProxyEvent 
@Override 
public void onAsyncCallFail(AsyncCallFailEvent event) { 
    Window.alert("Async fail"); 
    getView().setTopMessage("Oops, something went wrong..."); 
} 
@ProxyEvent 
@Override 
public void onAsyncCallSucceed(AsyncCallSucceedEvent event) { 
    Window.alert("Async success"); 
    getView().setTopMessage(null); 
} 

當我進入AdmininArea我正在給allerts:「異步啓動」,「異步成功」。所以我認爲這個想法是可行的,但不幸的是我看不到任何資源上的變化。請幫忙。我做錯了什麼?

+1

你在調試模式(超級開發模式)下使用生產編譯來測試它嗎?調試模式代碼分割中的AFAIK被禁用。 –

+0

我只在超級開發模式下測試過它。你的意思是'禁用'整個src是一次下載的。或者每當我更換有代碼拆分的地方時下載? - 正在發生這種情況 – masterdany88

+1

將不會生成任何代碼拆分點,並且整個應用程序一次性被卸載。如果您更改任何代碼,SDM將重新編譯該應用程序,並再次下載整個代碼。爲了測試代碼拆分,請嘗試在生產模式下運行它。 –

回答

1

代碼拆分在SuperDevMode中被禁用,因爲它與增量式編譯器不兼容,也會減慢編譯速度(請參閱此issue)。

要測試代碼分裂,編譯GWT應用程序(mvn clean install gwt:compile)和生產模式(以從目標目錄war文件,並把它放在f.e:Tomcat服務器目錄:webapps)進行測試。

相關問題