2012-07-09 59 views
0

我們有一個可用的Web應用程序,它是用ExtJS爲客戶端開發的,Struts,Spring,Hibernate用於服務器端。現在,我們正在考慮遷移到GXT(或者可能是GWT本身)。事情是我對GWT/GXT很新。我們正在試圖決定我們是否走上這條道路。

1)到目前爲止,我們有2個域用於我們的網絡應用程序。一個是已經部署了應用程序(Struts + ...),另一個主要是無cookie的自定義CDN。客戶端和服務器之間的傳輸主要是XHR請求,發送/接收JSON和/或JSONP。但是,隨着我們面前的新方法的出現,我開始明白,對於整個GXT應用程序,我們應該只有一個域。這是正確的還是我忘了在這裏考慮一些事情?

如果沒有,是否有可能我們僅部署了應用程序(即com.ourcompany.webapp.gxt.server。*)到主服務器,以及由GWT編譯和生成的內容編譯器到其他類CDN域?

2)我們面臨的另一個大問題是當前的應用程序大多由3個巨大的模塊組成。一個負責「登錄」,另一個負責「Webtop」,第三個負責「每個用戶都可以訪問的模塊」。後者由於每個用戶的「訪問權限」而在服務器上生成,顯然可能因用戶不同而不同。

我能找到的關於此事的唯一可能是Code Splitting。雖然我並不完全確定這是否是適合的解決方案。

我們希望應用程序在啓動時檢查用戶是否已登錄。如果不是,則加載SignIn集合的JavaScript文件(即webapp.signin.nocache.js),然後在用戶輸入正確的用戶名/密碼後,卸載此簽名文件並加載webtop.nocache.js和modules.nocache.js。

如果你能幫助我,我會非常感激。初學者GXT問題

回答

3

1)如果您的GWT應用程序是從不同的域加載的,則不得不面對相同的來源策略。你不能做一個xhr到不同的域。你可以使用ScriptTagProxy來解決這個問題。但它不覺得非常中性。

2)您可以使用CodeSplitting來動態地自動加載應用程序的特定部分。你所要做的就是將你的分解點轉換爲異步調用。 詳細的compile report爲您提供了一個非常好的概述代碼拆分的工作方式。

但CodeSplitting不會卸載已加載的代碼。如果它確實需要這樣做,則必須將用戶重定向到另一個url以加載相應的用戶依賴模塊。
一旦Javascript代碼已被加載並執行,它不可能從瀏覽器內存中刪除代碼。

Grettings, Peter

+0

謝謝您的迴應Peter。但是1)那麼使用兩個不同的域名是「實際上不是一個好方法」? 2)是否有可能在飛行中的某個分割點爲每個用戶生成modules.nocache.js? – Khosrow 2012-07-10 10:01:50

+0

1)正好; 2)如果你的代碼像if(userA){startUserAModul();} else if(userB){startUserBModul();} aso。並將「CodeSplitting」點放入startUserXModul方法中,gwt應該爲每個「模塊」自動創建額外的Javascript文件。這些JS文件會在您調用適當的模塊時自動加載。詳細的gwt編譯報告爲您提供了大量關於代碼拆分的信息。 – Peter 2012-07-11 05:41:12