2010-09-27 12 views
10

Abbiamo un progetto GWT molto grande che si traduce in un'app monolitica di dimensioni 2Mb. Il modo ovvio per suddividerlo è usare i punti di divisione. Ad esempio, la nostra app è guidata dai menu, quindi la logica dietro ogni azione del menu potrebbe essere un punto di divisione. Inoltre, il codice che richiama GPC RPC potrebbe anche essere un punto di divisione. In questo modo un'app 2Mb potrebbe probabilmente essere suddivisa in un'app di avvio 300K con il resto caricato al primo utilizzo.Come si disabilita la divisione del codice in GWT?

GWT tratta le chiamate a GWT.runAsync() come posizioni in cui è possibile suddividere il JS in parti più piccole che vengono caricate in modo asincrono in fase di runtime. per esempio. per impostare un punto di divisione in cui viene richiamato doSomething(), scriviamo così:

GWT.runAsync(new RunAsyncCallback() { 
    public void onFailure(Throwable caught) { 
    Window.alert("Oh dear could not load app"); 
    } 

    public void onSuccess() { 
    doSomething(); 
    } 
}); 

GWT compilatore vedrà questo codice e segnare come un candidato per la scissione e spezzare il codice in frammenti più piccoli che saranno caricati come vengono utilizzati per la prima volta.

Il problema è che se mettiamo i punti di divisione nel codice, il build richiede letteralmente 10-50 volte più tempo per essere eseguito. Immagino che il codice non sia molto efficiente quando si tratta di un progetto che contiene un numero molto elevato di classi. Quindi una build di 2 minuti diventa una build di 20-100 minuti, il che è inaccettabile.

Quindi la domanda è: come posso inserire i punti di divisione nel codice ma impedire al compilatore di scindersi a meno che non lo chieda esplicitamente? Immagino che lo sviluppo giorno per giorno ignorerà i punti di divisione, ma una costruzione notturna o di produzione si dividerà.

Qualche idea?

risposta

Problemi correlati