2017-02-27 67 views
1

我們在GWT之上使用JBoss Errai框架來構建Web應用程序。我們遇到的問題是編譯版本的應用程序在使用優化進行編譯時已經大小約爲10兆字節。GWT cache.js太大 - 需要時間才能顯示應用

GWT/Errai應用程序是否有一種方法可以在加載while cache.js文件之前拆分或以某種方式顯示初始頁面?

回答

1

您可以使用Code Splitting機制。

要拆分您的代碼,只需在 ,你希望程序能夠暫停 下載更多的代碼的地方插入調用該方法GWT.runAsync。這些位置被稱爲分割點。

例如:

public class Hello implements EntryPoint { 
    public void onModuleLoad() { 
    Button b = new Button("Click me", new ClickHandler() { 
     public void onClick(ClickEvent event) { 
     GWT.runAsync(new RunAsyncCallback() { 
      public void onFailure(Throwable caught) { 
      Window.alert("Code download failed"); 
      } 

      public void onSuccess() { 
      Window.alert("Hello, AJAX"); 
      } 
     }); 
     } 
    }); 

    RootPanel.get().add(b); 
    } 
} 

...最初下載不包括字符串 「Hello, AJAX」,也不實行Window.alert任何必要的代碼。一旦點擊了 按鈕,就會到達對GWT.runAsync的調用,並且 代碼將開始下載。假設它成功下載,將會調用onSuccess方法的 ;由於必要的代碼已下載 ,該調用將會成功。如果沒有下載 代碼,則將調用onFailure。

你會發現在文檔的詳細信息:http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html

+0

實際上,我尋找的東西會爲Errai – xybrek

+0

這是不可能的,你會發現專門針對Errai一些工作中移除(因爲它是相當非流行)但是代碼分裂,正如前面提到的那樣,它是一個基本的GWT機制,並且正在解決您確切的問題;所以你很有可能會爲你工作(除非Errai做了一些事情來專門讓你避免使用代碼拆分) – Andrei

+0

我不會說Errai不受歡迎,我聽說過它的好處。不知道Errai,雖然我不能理解(並且會同意Errai通過生成一些難以/不可能爲GWT編譯器進行優化的代碼人爲地增加了膨脹;可能取決於您使用的Errai功能) –

0

如果你不想使用分割點實際上降低初始有效載荷的大小,你可以展示的開頭有一些加載屏幕,讓用戶知道在至少應用程序正在啓動。

這可以很容易地做到:

  • 添加div顯示您hostpage
  • div應您的<script type="text/javascript" src="app.nochache.js"></script>標記之前增加了一些加載動畫(example
  • 給該div一個id ,例如:loading-icon
  • onModuleLoad方法中,在*.cache.js已被加載後,通過設置刪除div婷它display:none;和/或從DOM
相關問題