J'ai lu beaucoup de questions «plus votées» pour GWT. Plusieurs de ces questions parlent des pièges ou des problèmes avec GWT.
Dans les articles: quel framework Javascript (jQuery vs Dojo vs …)? Et les plus grandes pièges de GWT? , Certaines affiches semblent suggérer que GWT n'est pas assez léger ou qu'il existe de meilleures alternatives qui peuvent être utilisées.
La plupart d'entre vous ont-ils l'impression qu'il y a des problèmes avec GWT qui n'ont pas été corrigés avec GWT 2.0 – ce qui vous inciterait à suggérer d'utiliser un cadre plus simple pour un nouveau projet?
Dans une certaine mesure, GWT ne devrait-il pas être un peu à l'épreuve du futur (puisque vous ne devez pas vous soucier que cela change drastiquement depuis la sortie vers la sortie et que Google appuie?
Je me rends compte que la réponse à cette question dépend beaucoup de ce que vous voulez faire ou de ce que vous souhaitez faire. Je regarde cela du point de vue du démarrage d'une nouvelle application Web qui sera éventuellement utilisée par des millions d'utilisateurs.
Commençons par tous les compromis que je peux proposer:
<div>
s dans des objets distincts, ce qui rendra le code sympa et soigné ". Bien sûr, je l'exagère, mais vous comprenez le problème: il est facile d'imaginer qu'un programmeur inexpérimenté puisse mettre un Widget
complet avec beaucoup de Handlers
dans chaque cellule d'un FlexTable
… Et puis (s) Il va perdre beaucoup de temps à se demander pourquoi l'application se sent lentement;) tl; dr: il est facile pour les débutants de GWT de rendre leurs applications "bloaty" en écrivant un code qui semble être conforme à la documentation / samples / sens commun; ) Suggèrent C'est tout pour les compromis que je peux penser – si quelqu'un veut ajouter quelque chose, ajoutez des commentaires.
Maintenant pour les avantages. Je vais sauter un peu comme l' internationalisation , la compatibilité entre les navigateurs pour une intégration gratuite et facile avec les autres bibliothèques de Google, etc., car elles sont un peu évidentes et faciles à saisir. Je vais essayer de me concentrer sur les caractéristiques moins soulignées, mais toujours très importantes:
Donc, il peut optimiser un tel genre:
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; } }
..pour ça:
public class ShapeExample implements EntryPoint { public void onModuleLoad() { Window.alert("Area is 4.0"); } }
Et puis obscurcir cela et minimiser. En outre, cela se fait de cette façon, ce qui rend les fichiers résultants plus compressibles via gzip.
Selon votre expérience et / ou vos préférences, ce qui suit pourrait être un avantage (c'est pour moi, mais parfois c'est un PITA;)) ou non:
SuggestBox
a beaucoup d'endroits où vous pouvez remplacer le comportement par défaut par vous-même – vous pouvez spécifier un mode différent pour afficher les suggestions ( SuggestBox.SuggestionDisplay
), Action personnalisée lorsque l'utilisateur sélectionne une suggestion ( SuggestBox.SuggestionCallback
) ou fournit simplement un SuggestOracle
personnalisé pour alimenter SuggestBox
avec Suggestion
s … La ligne de fond est – essayez GWT, il est probable que vous l'aimerez et que vous ne voudrez plus jamais écrire dans pure JavaScript;)
Nous construisons des classes petites (~ 2K classes Java) à moyennes (~ 6K) d'entreprise régulièrement en utilisant GWT depuis la sortie de la version 1.3. Je comprends qu'il existe un ensemble différent de problèmes à résoudre dans un site public ayant des milliers de clics par seconde, mais j'essaierai de parler de nos plus gros problèmes dans GWT 1.x et de la façon dont GWT 2.0 s'approche de cela.
Flux de mémoire du navigateur Les fuites IE6 avec GWT sont formidables, les fuites IE7 peuvent être compensées par des actualisations périodiques de pages, IE8 promet une certaine stabilité dans ce domaine, mais pas encore largement accepté dans l'entreprise. Et oui, même le code GWT valide sans les appels JS natifs renverse la mémoire dans certains cas. Surtout quand UI est complexe et vous faites beaucoup d'appels Panel.clear (). Il n'existe aucun outil utile pour identifier la cause réelle de la fuite en ce moment. Sauf si vous savez comment pirater le navigateur lui-même.
Performances de rendu vous devez écrire votre code UI avec beaucoup d'attention, surtout lorsque vous créez des widgets personnalisés couramment utilisés. Des connaissances profondes en JavaScript, CSS et DOM sont encore nécessaires. Il existe beaucoup de matériel sur Internet sur ce sujet. Vous devez savoir comment et quand descendre du niveau de widget GWT pour manipuler DOM directement.
Taille du contenu téléchargeable, il était impossible avant 2.0 de diviser le module sur différentes pièces téléchargeables sans avoir une navigation "difficile" dans l'application. Mais cela effacera le contexte de JavaScript et nécessitera un rechargement de fenêtre.
UI Developers Mind Shift Les développeurs d'interface utilisateur expérimentés ne connaissent pas Java et OOP. Les développeurs Java expérimentés ne connaissent pas CSS, JS, HTML et n'aiment pas créer de l'interface utilisateur. UI Binder va dans la bonne direction.
Nous avons effectué la migration 1.3 -> 1.5 -> 1.7 et c'était toujours juste une recompilation et quelques corrections CSS. GWT 2.0 supprime beaucoup de code obsolète et les approches initiales (structure de projet, GWTShell) et peuvent être difficiles à migrer rapidement. Mais toutes les fonctionnalités semblent prometteuses et il est bon que Google ait abandonné un code hérité à un moment donné. Je ne suis pas sûr de la stabilité de 2,0 cependant, car nous ne l'avons pas encore utilisé dans des projets réels.
J'espère que cela t'aides.
Nous avons une application GWT avec un tas de tests d'acceptation de Selenium. Je pensais (comme vous) qu'il serait sûrement sécurisé de passer GWT de 1.7 à 2.0. Et c'était – surtout. L'application a toujours fonctionné de la même façon pour les utilisateurs "humains", mais les tests de sélénium ont tous éclaté. Il existe une version plus récente de Selenium en préparation (à la version alpha, avec de nombreuses opérations non prises en charge), mais si nous voulons rester avec GWT 2, il semble que nous devons abandonner une certaine stabilité. Faites donc attention aux hypothèses «à l'épreuve du futur».
Notre décision d'utiliser GWT a été faite il y a quelques mois, après avoir comparé YUI et ZK. Je suis toujours heureux d'avoir choisi GWT. Le niveau de soutien sur le site Web de GWT et la qualité générale de la documentation semblent très élevés.
GWT fait le partage de modules et fournit un profil de performance qui aide à contrer les arguments qu'il n'est pas assez léger.