Je vais commencer par dire que je suis un grand fan de GWT, mais oui il y a beaucoup de pièges, mais la plupart si ce n'est tous nous avons été en mesure de surmonter :
Problème : Temps de compilation longs. Plus votre projet grandit, plus le temps de compilation est long. J'ai entendu parler de compilations de 20 minutes, mais les miennes durent en moyenne 1 minute.
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 accélérer massivement les temps de compilation en ne construisant que pour un seul 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 (du moins sous OS X) et est loin de correspondre aux modifications "en direct" que vous obtenez lorsque vous modifiez des éléments tels que des pages JSP ou Rails et que vous appuyez sur le bouton de rafraîchissement de votre navigateur.
Solution : Vous pouvez donner au mode hébergé plus de mémoire (j'ai généralement 512M) mais c'est toujours lent, j'ai trouvé qu'une fois que vous êtes assez bon avec GWT vous arrêtez d'utiliser cela. Vous faites un grand nombre de changements, puis compilez pour un seul navigateur (généralement 20s de compilation) et puis appuyez simplement sur rafraîchir dans votre navigateur.
Mise à jour : Avec GWT 2.0+ ce n'est plus un problème, parce que vous utilisez le nouveau 'Development Mode'. Cela signifie essentiellement que vous pouvez exécuter le code directement dans votre navigateur de choix, donc pas de perte de vitesse, plus vous pouvez firebug/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 HTML, ce qui rend plus difficile de prendre un design HTML et de le transformer en GWT.
Solution : Encore une fois, on s'y habitue, mais malheureusement, convertir un design HTML en un design GWT sera toujours plus lent que de faire quelque chose comme convertir un design HTML en une page JSP.
Problème : GWT demande un peu de temps pour s'y retrouver, et n'est pas encore très répandu. 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 les personnes qu'elle embauche, alors vous pouvez toujours choisir des personnes qui connaissent GWT ou qui veulent l'apprendre.
Problème : GWT est un marteau de forgeron comparé à quelque chose comme jquery ou simplement javascript. Il faut beaucoup plus de configuration pour que ça fonctionne que de simplement inclure un fichier JS.
Solution : Utilisez des bibliothèques comme jquery pour les tâches simples et plus petites qui leur sont adaptées. Utilisez GWT lorsque vous voulez construire quelque chose de vraiment complexe en AJAX, ou lorsque vous avez besoin de faire passer vos données dans les deux sens via le mécanisme RPC.
Problème : Parfois, afin de remplir votre page GWT, vous devez faire un appel au serveur lors du premier chargement de la page. Il peut être ennuyeux pour l'utilisateur de rester assis 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, donc vous pouvez faire tous vos appels GWT à ce moment-là, et les précharger sur la page, pour un chargement instantané. Voir ici pour plus de détails :
Accélérer le chargement de la page en pré-sérialisant vos appels GWT
Je n'ai jamais eu de problèmes avec le stylisme CSS de mes widgets, qu'ils soient prêts à l'emploi, personnalisés ou non, donc je ne vois pas ce que vous entendez par là ?
En ce qui concerne les performances, j'ai toujours trouvé qu'une fois compilé le code GWT est rapide, et les appels AJAX sont presque toujours plus petits que de faire un rafraîchissement de la 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 sont assez compacts.