2011-09-21 57 views
1

我正在考慮使用GWT啓動一個Web應用程序,因爲我比使用Java更適合使用Java。另外,我想知道Web開發最佳實踐以及GWT如何優化Javascript。我想分析GWT生成的JavaScript輸出,以便我可以學習如何編寫好的Javascript。是否有可能或者是由GWT生成的JavaScript難以辨認,只能通過瀏覽器來理解?GWT:是否可以使用GWT啓動項目,然後最終遷移到完整的JavaScript?

編輯: 是的,我看着* .nocache.js,它不清晰。 雖然我現在會繼續使用GWT,但我想知道是否有任何Web開發框架可以幫助我快速創建Web應用程序,但是一路上指引我使用Javascript的最佳實踐?我更喜歡如果我的網絡應用程序不與這個框架綁得太緊,如果我願意,我可以用javascript(+ jquery)編程。

+1

你考慮過JSNI嗎?它允許你寫/在你的GWT應用程序調用本地JavaScript,使可能的jQuery集成(或任何其他JS庫爲此事) –

+1

默認的編譯器提出了模糊JavaScript,但你可以改變輸出爲「詳細」,它變得清晰可辨。如果你使用Eclipse,右鍵點擊你的項目>>谷歌>> GWT編譯>>選擇「詳細」作爲輸出格式。更多信息http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html#DevGuideCompilerOptions –

+1

簡短的回答是否定的。GWT做了很多「幕後」腳本編寫,儘管可以讀取_,但不會成爲您可以以非GWT方式利用的東西。正如其他人所說,最適合你的選擇可能是JQuery或JSNI。 –

回答

2

當然,你總是可以創建GWT一個微小的「案例研究」項目,讓他跟-style PRETTYDETAILED編譯,然後分析

  • 什麼GWT做了優化和
  • 什麼區別GWT爲不同的瀏覽器創建,

但我認爲這種方法僅限於微觀細節水平,很難成功應用於一個完整的項目。

但是,你可以從GWT(其實更多從閱讀GWT文檔不是從分析生成的代碼)學習了幾個不錯的概念,並試圖重新實現它們的純JavaScript項目:

  • 如何GWT會自動使用混淆的CSS名稱替換CSS類名稱,以便您可以使用許多小型CSS文件,並且仍然保證唯一性。
  • GWT如何首先確定瀏覽器,然後只加載相應的JS和CSS文件。
  • ...

此外,你可以嘗試寫一些好的GWT應用程序,並找出,哪些概念使用。他們中的很多人在Java中看起來很自然,但他們不在JavaScript中(這是我創建一些JavaScript原型,然後在GWT中重寫它們的經驗)。您可能會發現,隨着Java代碼的增長,您的Java代碼比使用JavaScript的天真方法編寫的代碼更容易維護。當你思考它時,一些概念可以很好地轉換成JavaScript,其中一些概念不是那麼多,有些情況下,JavaScript有它自己的(動態的)概念,這在Java中不能很好地工作。無論如何,請閱讀/觀看Douglas Crockford關於JavaScript概念的說法。

不要忘記,創建GWT的原因之一是,它應該可以在客戶端使用典型的體系結構,模式和習慣用法,這在應用時很難應用用JavaScript編寫代碼。

1

我看到它默認是壓縮的,幾乎不可能讀取。也許你有選擇來說清楚。

我認爲如果您使用gwt,您必須使用它,因爲例如當新的瀏覽器到來時,您只需要再次編譯該頁面,並且它可以很好地工作。

如果你想在js中寫點東西,用jquery去。

+1

這是錯誤的,GWT編譯器提供了很多選項來定製它生成的輸出javascript。在另一個說明中,輸出javascript被混淆與gwt如何支持新瀏覽器無關 – pistolPanties

1

看看谷歌的Debugging and Compiling頁面。你可以使用編譯器的-style PRETTY參數來生成可讀的javascript。

更新:編譯代碼從Java到了JavaScript

GWT編譯器做了很多事情。 Ray Cromwell在他的Optimizing Apps with GWT Compiler演示文稿中談到了Google I/O 2010中的這一點。如果您對GWT編譯器對JavaScript進行優化感興趣,這非常有用。

+1

我更感興趣的是MVP模式中框架如何組織代碼,而不是優化。 – Salil

+1

@Salil:GWT不會將代碼組織成MVP模式 - 這必須由應用程序的程序員/架構師完成。 –

1

你通過分析GWT生成的代碼來學習Javascript的方式似乎不是一個好方法。 如果你想學習Javascript,我建議專注於Javascript,因爲編譯結果總是與模式類似,但如果你手寫代碼,那肯定會是另一個結果。

但使用GWT在我看來是一個很好的方式來看看進入「網絡2.0」 - 世界

1

雖然GWT可以使用-PRETTY選項生成「可讀」的javascript,它不會是真的可讀。代碼將很難理解,並且與使用jQuery或任何其他JavaScript庫的方式相比,它的構造方式完全不同。在java世界之外,測試和調試幾乎是不可能的。

另一方面,您可以使用JSNI訪問來自GWT的純Javascript,反之亦然使用gwt-exporter

1

您可能會發現這與嘗試從編譯的C程序的輸出中學習彙編程序一樣困難。你的孩子記得C嗎?彙編? Anyhoo,我建議你創建一個簡單的GWT程序,相當於一個「Hello world」類的東西,並使用這裏給出的建議來獲得非常不混淆的輸出。如果你能理解你所看到的Javascript,並且它與人類可能直接使用JavaScript編寫來完成相同的任務相似,那麼也許這會起作用。另一方面,如果出現的是大量模糊的初始化和設置,並且很大程度上依賴於外部Javascript函數來執行即使是最直接的操作,那麼也許以老式的方式學習Javascript會是一種更好的方法。

+0

我知道基本的Javascript。但是我想要輕鬆地將自己融入產品質量的Javascript編程中,最好是通過理解庫和框架如何構造代碼。 – Salil

1

你可以從你的gwt中導出一個javascript api,這樣你就可以從原生js或jquery中與你的gwt代碼進行互操作。

http://code.google.com/p/gwt-exporter/

這將讓你發出一個跨平臺的GWT庫,將目前已編譯的API原始的JavaScript。將您的gwt工作導出到原始js項目非常有用。

這也是一個好項目,教你兩個強大的Java和JavaScript;它使用註釋和自定義生成器來導出java方法和字段。