原理
使用 Java 語言編寫 AJAX應用程式,然後編譯為最佳化的 JavaScript
與僅在文本級別運行的JavaScript Minifier 不同,GWT
編譯器會在整個 GWT 資料庫中執行綜合性靜態分析和最佳化,通常生成的JavaScript 載入和執行均比等效手寫的 JavaScript 更快。例如,GWT編譯器可以安全地消除無用代碼 --極大的減少不使用的類別、方法、欄位甚至方法參數 -- 以確保您編譯的腳本儘可能最小。另一個示例:GWT編譯器選擇性地內聯方法,消除方法調用的性能開銷。
交叉編譯提供了開發所需的可維護的提取和模組性,而不會導致運行時性能損失。
運行環境
GWT應用程式有兩種方式運行:
HostedModel
在Hosted Model方式下,Java程式並不會被編譯成JavaScript,GWT只是創造了一個類似瀏覽器的環境,直接運行使用GWT開發的程式。
這種模式最具生產力(這種模式下可以Debug所有的Java代碼), 所以開發環境通常使用Hosted Model,但是真正的程式執行不使用這種模式。
WebModel
WebModel就是將使用GWT編寫的Java程式整整編譯成JavaScript,在Web容器上運行,使用瀏覽器訪問的模式,這種方式只有在測試或者運行的時候才使用,每次對Java類的修改必須重新編譯這些Java類,之後重新部署套用。
所以生產力比較低。
開發流程
編輯 Java 代碼,然後立即查看更改而無需重新編譯
在開發過程中,使用 GWT 的託管模式瀏覽器可以立即查看代碼更改。無需彙編譯為 JavaScript 或部署到伺服器。只需進行更改,然後在託管模式瀏覽器中單擊“刷新”。
使用 Java 調試器
單步調試當前 AJAX 代碼
在生產過程中,可以將代碼編譯為純 JavaScript,但是在開發階段,代碼將在 Java
虛擬機作為
位元組碼運行。這意味著,當代碼執行處理滑鼠事件等操作時,將獲得功能完整的 Java 調試。Java
調試器可以執行的任何操作也套用於GWT 代碼,所以也可以執行
斷點和單步調試等自然操作。
編譯和部署最佳化的、跨瀏覽器的 JavaScript
準備好進行部署後,GWT 會將 Java 代碼編譯成獨立的純 JavaScript 檔案,任何
網路伺服器都支持該檔案。此外,GWT應用程式可自動支持IE、Firefox、Mozilla、Safari 和 Opera,而無需在代碼中進行瀏覽器檢測或特殊封裝。編寫相同的代碼後,GWT會根據每個用戶的特殊瀏覽器將其轉換為最有效的 JavaScript。
功能
通過非常簡單的 RPC 與伺服器通信
GWT支持一組開放的
傳輸協定,例如 JSON 和 XML,但 GWT
RPC 使所有 Java 通信都特別輕鬆且有效。類似於傳統
JavaRMI,只需創建一個用於指定您要調用的遠程方法的接口。從瀏覽器調用遠程方法時,GWT RPC將自動
串列化參數,並調用伺服器上的適當方法,然後反串列化客戶端代碼的返回值。GWT RPC也將非常成熟,其可以處理多態類層次結構、對象圖循環,甚至可以跨網
拋出異常。
GWT-根據用戶個人資料最佳化 JavaScript腳本下載
延時綁定是 GWT的一種功能,可以生成許多版本的編譯代碼,而在運行時自引導期間僅其中一個版本需要由特殊客戶端載入。每個版本均以瀏覽器為基礎生成,並帶有應用程式定義或使用的任何其他軸。例如,如果要使用 GWT 的國際化模組來國際化應用程式,GWT
編譯器可能會根據每個瀏覽器環境生成各個版本的應用程式,例如“英文版 Firefox”、“法文版 Firefox”、“英文版 InternetExplorer”等,因此,部署的 JavaScript 代碼非常緊湊並且下載比在 JavaScript 中編碼然後聲明更快。
跨項目重複使用 UI 組件
通過合成其他 Widget 來創建可重複使用的 Widget,然後輕鬆地在面板中自動對他們進行布局。GWT 展示應用程式可以提供 GWT 中各種 UI 功能的概述。要在其他項目中重複使用 Widget 嗎?只需將其打包以便他人在 JAR 檔案中使用。
GWT-使用其他 JavaScript 庫和本機 JavaScript 代碼
如果 GWT 的類庫不能滿足您的需要,則可以使用 JavaScript 本地接口 (JSNI) 在 Java
原始碼中加入手寫的JavaScript。使用 GWT 1.5,現在就可以為 GWT JavaScriptObject (
JSO) 類創建子類以將Java“類覆蓋”創建到任意 JavaScript 對象上。因此,可以獲得將 JS 對象比擬為適當的Java類型(例如代碼完成、重構、內聯)而無需另外占用記憶體或速度的好處。此功能可以最佳化使用 JSON 結構。
輕鬆支持瀏覽器的後退按鈕和歷史記錄
不,AJAX應用程式無需破壞瀏覽器的後退按鈕。使用 GWT,您可以通過輕鬆地為瀏覽器的後退按鈕歷史記錄添加狀態,來使您的站點更加有用。
有效的本地化應用程式
使用 GWT 功能強大的延時綁定技術來輕鬆創建有效的國際化應用程式和庫。此外,從 1.5 版起,標準 GWT Widget 開始支持雙向性。
使用選擇的開發工具提高生產力
由於 GWT 使用 Java,您可以使用所有喜歡的 Java 開發工具(Eclipse、IntelliJ、JProfiler、JUnit)來進行AJAX 開發。這使網路開發人員可以控制自動化 Java 重構和代碼提示/完成的生產效率。此外,
Java語言的靜態類型檢查使開發人員可以在編寫代碼時而非運行時找出一類 JavaScript錯誤(輸入錯誤、
類型不匹配),在減少錯誤的同時提高生產率。沒有臨時變數發現的更多用戶。最後,則可以利用基於 Java 的 OO設計模式和提取,由於編譯器最佳化,模式和提取易於理解和維護而無需用戶承擔任何運行時性能損失。
使用 JUnit 測試代碼
GWT 與 JUnit 直接集成,使您可以在
調試器和瀏覽器中進行
單元測試,並且您甚至可以對異步 RPC 進行單元測試。
擴展或投稿 - Google Web 工具包是一種
開源軟體使用 Apache 2.0 許可,可獲取所有 GWT 代碼。如果您對投稿感興趣,請訪問使 GWT 變得更好。
套用
目前GWT的套用還不是特別廣泛,包括google自己的gmail等系統都不是用GWT開發。但是在這一些電子領域裡GWT已經有廠商使用GWT開發設備上的用戶界面,從而實現遠程本地一套代碼的效果。