私はGWTに関する「最も投票数の多い」質問をたくさん読んでいます。これらの質問のいくつかは、GWTの落とし穴や問題について話します。
記事: どのJavascriptフレームワーク(jQuery vs Dojo vs…)? および 最大のGWTの落とし穴? 、一部のポスターは、GWTが十分に軽量ではない、またはあることを示唆しているようです。使用できるより良い代替案。
ほとんどの人は、GWT 2.0で修正されていないGWTの問題があると感じていますか?それは、新しいプロジェクトにもっと単純なフレームワークを使用することを提案する傾向がありますか?
ある程度、GWTはある程度将来性があるべきではありません(リリースごとに大幅に変更されることを心配する必要がなく、Googleによってサポートされているため)?
この質問への答えは、あなたが何をしたいのか、何をしたいのかによって大きく異なることを私は理解しています。私はこれを、最終的に何百万ものユーザーが使用する新しいWebアプリケーションを開始するという観点から見ています。
私が思いつくことができるすべてのトレードオフから始めましょう:
<div>
を別々のオブジェクトにしましょう。そうすれば、コードはすべてきれいになります。」もちろん、私はそれを誇張しすぎていますが、要点はわかります-経験の浅いプログラマーが、のすべてのセルにたくさんのWidget
を含む本格的なHandlers
を置くことができることは容易に想像できます。 a FlexTable
...そして、なぜアプリケーションが遅く感じるのか疑問に思うのに多くの時間を無駄にします;)tl; dr:GWTの初心者にとっては簡単ですドキュメント/サンプル/常識に沿っているように見えるコードを書くことによってアプリケーションを「肥大化」させる;)提案これで、私が考えることができるトレードオフはすべてです。誰かが何かを追加したい場合は、コメントを追加してください。
今利点のために。 internationalization 、 cross-browser compatible のようなものは、他のGoogleのライブラリと簡単に統合できるので、簡単に理解できるので、スキップします。あまり強調されていないが、それでも非常に重要な機能に焦点を当てようとします。
したがって、canは次のようなものを最適化できます:
public class ShapeExample implements EntryPoint {
private static final double SIDE_LEN_SMALL = 2;
private final Shape shape = new SmallSquare();
public static abstract class Shape {
public abstract double getArea();
}
public static abstract class Square extends Shape {
public double getArea() { return getSideLength() * getSideLength(); }
public abstract double getSideLength();
}
public static class SmallSquare extends Square {
public double getSideLength() { return SIDE_LEN_SMALL; }
}
public void onModuleLoad() {
Shape shape = getShape();
Window.alert("Area is " + shape.getArea());
}
private Shape getShape() { return shape; }
}
..これに:
public class ShapeExample implements EntryPoint {
public void onModuleLoad() {
Window.alert("Area is 4.0");
}
}
そして、これを難読化して最小化します。さらに、これはそのような方法で行われるため、結果のファイルはgzipを介してより圧縮可能になります。
あなたの経験や好みに応じて、以下が利点になるかもしれません(私にとってはそうですが、時にはそれはPITAです;))またはそうではありません:
SuggestBox
には、デフォルトの動作を独自の動作でオーバーライドできる場所がたくさんあります-別の方法を指定できます提案を表示するには( SuggestBox.SuggestionDisplay
)、ユーザーが提案を選択したときにカスタムアクションを実行するか( SuggestBox.SuggestionCallback
)、または単にカスタムを提供します- SuggestOracle
SuggestBox
に Suggestion
s ..結論は-GWTを試してみてください。きっと気に入るはずで、純粋なJavaScriptで二度と書きたくないでしょう;)
バージョン1.3がリリースされて以来、GWTを使用して小規模(〜2K Javaクラス)から中規模(〜6K)のエンタープライズシステムを定期的に構築しています。解決すべきさまざまな問題があることを理解しています。毎秒数千回のクリックがあるパブリックサイトで、GWT1.xの最大の問題とGWT2.0がそれにどのようにアプローチするかについて説明しようと思います。
ブラウザのメモリリーク GWTによるIE6のリークは非常に大きく、IE7のリークは定期的なページの更新で補うことができます。IE8はこの分野である程度の安定性を約束しますが、企業ではまだ広く受け入れられていません。もちろん、ネイティブJS呼び出しのない有効なGWTコードでも、特定のケースでメモリリークが発生します。特にUIが複雑で、Panel.clear()呼び出しを多数実行している場合。現時点では、リークの本当の原因を特定するための便利なツールはありません。ブラウザ自体をハッキングする方法を知らない限り。
レンダリングパフォーマンス特に一般的に使用されるカスタムウィジェットを作成する場合は、UIコードを慎重に記述する必要があります。 JavaScript、CSS、DOMに関する深い知識が必要です。このトピックに関するインターネットにはたくさんの資料があります。 GWTウィジェットレベルから直接DOM操作に移行する方法とタイミングを知る必要があります。
ダウンロード可能なコンテンツのサイズ 2.0より前では、アプリケーションに「ハード」ナビゲーションを組み込むことなく、モジュールを異なるダウンロード可能な部分に分割することは不可能でした。ただし、JavaScriptコンテキストがクリアされ、ウィンドウの再読み込みが必要になります。
I開発者のマインドシフト経験豊富なUI開発者は知らないJavaおよびOOP。経験豊富なJava開発者はCSSを知らない、 JS、HTMLであり、UIの構築は好きではありません。UIバインダーは正しい方向に進んでいます。
1.3-> 1.5-> 1.7の移行を行いましたが、それは常に再コンパイルといくつかのCSS修正でした。 GWT 2.0は、多くの非推奨のコードと初期アプローチ(プロジェクト構造、GWTShell)を削除し、迅速に移行するのが難しい場合があります。しかし、すべての機能は有望に見え、Googleがレガシーコードをある時点で削除したことは良いことです。 2.0の安定性については、実際のプロジェクトではまだ使用していないため、よくわかりません。
お役に立てれば。
多数のSelenium受け入れテストを備えたGWTアプリがあります。私は(あなたのように)GWTを1.7から2.0にアップグレードするのは確かに安全だと思いました。そしてそれは-ほとんどでした。アプリは「人間」のユーザーでも同じように機能しましたが、Seleniumのテストはすべて失敗しました。 Seleniumの新しいバージョンが準備中です(アルファリリースで、多くのUnsupportedOperationsがあります)が、GWT 2を使い続けたい場合は、ある程度のテスト容易性を放棄する必要があるようです。したがって、「将来性のある」仮定には注意してください。
GWTを使用するという私たちの決定は、YUIとZKを比較した後、数か月前に行われました。 GWTを選んでよかったです。 GWTWebサイトでのサポートのレベルとドキュメントの一般的な品質は非常に高いようです。
GWTはモジュール分割を行い、パフォーマンスプロファイリングを提供します。これは、十分に軽量ではないという議論に対抗するのに役立ちます。