Je vais commencer par dire que je suis un grand fan de GWT, mais oui, il y a de nombreux pièges, mais la plupart sinon tous nous avons pu surmonter:
Problème: temps de compilation longs, à mesure que votre projet grandit, le temps nécessaire pour le compiler augmente également. J'ai entendu parler de rapports de compilations de 20 minutes, mais les miennes durent en moyenne 1 minute environ.
Solution: divisez votre code en modules séparés et dites à ant de ne le construire que lorsqu'il est modifié. De plus, pendant le développement, vous pouvez considérablement accélérer les temps de compilation en ne construisant que pour un navigateur. Vous pouvez le faire en mettant ceci dans votre fichier .gwt.xml:
<set-property name="user.agent" value="gecko1_8" />
Où gecko1_8 est Firefox 2+, ie6 est IE, etc.
Problème: le mode hébergé est très lent (sur OS X au moins) et ne correspond pas aux changements `` en direct '' que vous obtenez lorsque vous modifiez des éléments tels que des pages JSP ou Rails et que vous appuyez sur Actualiser dans votre navigateur.
Solution: vous pouvez donner plus de mémoire au mode hébergé (j'en ai généralement pour 512M) mais c'est toujours lent, j'ai trouvé qu'une fois que vous êtes assez bon avec GWT, vous arrêtez de l'utiliser. Vous apportez une grande partie des modifications, puis compilez pour un seul navigateur (généralement 20s de compilation), puis appuyez simplement sur Actualiser dans votre navigateur.
Mise à jour: avec GWT 2.0+, ce n'est plus un problème, car vous utilisez le nouveau «Mode de développement». Cela signifie essentiellement que vous pouvez exécuter du code directement dans le navigateur de votre choix, donc pas de perte de vitesse, plus vous pouvez le firebug / l'inspecter, etc.
http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM
Problème: le code GWT est java et a une mentalité différente de la mise en page d'une page HTML, ce qui rend plus difficile la prise d'une conception HTML et sa transformation en GWT
Solution: Encore une fois, vous vous y habituez, mais malheureusement, la conversion d'une conception HTML en une conception GWT sera toujours plus lente que de faire quelque chose comme la conversion d'une conception HTML en une page JSP.
Problème: GWT prend un peu de temps et n'est pas encore courant. Cela signifie que la plupart des développeurs qui rejoignent votre équipe ou maintiennent votre code devront l'apprendre à partir de zéro
Solution: Il reste à voir si GWT va décoller, mais si vous êtes une entreprise qui contrôle qui vous embauchez, vous pouvez toujours choisir des personnes qui connaissent GWT ou veulent l'apprendre.
Problème: GWT est un marteau comparé à quelque chose comme jquery ou tout simplement javascript. Il faut beaucoup plus de configuration pour le faire que d'inclure simplement un fichier JS.
Solution: utilisez des bibliothèques telles que jquery pour des tâches plus petites et simples qui leur conviennent. Utilisez GWT lorsque vous souhaitez créer quelque chose de vraiment complexe dans AJAX, ou lorsque vous devez transmettre vos données dans les deux sens via le mécanisme RPC.
Problème: Parfois, pour remplir votre page GWT, vous devez passer un appel au serveur lors du premier chargement de la page. Il peut être ennuyeux pour l'utilisateur de s'asseoir là et de regarder un symbole de chargement pendant que vous récupérez les données dont vous avez besoin.
Solution: dans le cas d'une page JSP, votre page a déjà été rendue par le serveur avant de devenir HTML, vous pouvez donc effectuer tous vos appels GWT ensuite, et les précharger sur la page, pour un chargement instantané. Voir ici pour plus de détails:
Accélérez le chargement des pages en pré-sérialisant vos appels GWT
Je n'ai jamais eu de problèmes avec le style CSS de mes widgets, prêts à l'emploi, personnalisés ou autres, donc je ne sais pas ce que vous entendez par là un piège?
En ce qui concerne les performances, j'ai toujours trouvé qu'une fois compilé le code GWT est rapide et que les appels AJAX sont presque toujours plus petits que l'actualisation d'une page entière, mais ce n'est pas vraiment unique à GWT, bien que les paquets RPC natifs que vous obtenez si vous utilisez un back-end JAVA est assez compact.