36 votes

Pourquoi GWT? Avantages et compromis de l'utilisation de ce cadre RIA

Je suis nouveau sur stackoverflow et ont été la lecture à travers un tas de "la plus haute voté" questions pour GWT. Plusieurs de ces questions, parler des pièges ou des problèmes avec GWT. Dans les articles: Qui framework Javascript (jQuery vs vs Dojo ... )? et Plus GWT Pièges?, quelques affiches semblent suggérer que GWT n'est pas suffisamment léger ou qu'il existe de meilleures solutions de rechange qui peuvent être utilisés. Faire la plupart des vous vous sentez qu'il ya des problèmes avec GWT qui n'ont pas été corrigés avec GWT 2.0 -- vous ne vous enclins à suggérer à l'aide d'un simple cadre pour un nouveau projet?

Dans une certaine mesure, ne devrait pas GWT-être un peu de l'avenir (puisque vous n'avez pas à vous soucier de changer radicalement d'une version à une autre et depuis il est soutenu par Google)? Je me rends compte que la réponse à cette question dépend de ce que vous voulez faire ou que vous souhaitez faire. Je suis en train de regarder cela dans la perspective de lancer une nouvelle application web qui sera éventuellement utilisé par des millions d'utilisateurs.

52voto

Igor Klimer Points 11703

Compromis

Commençons avec tous les compromis que je peux venir avec:

  • vous êtes à l'aide de Java - cela signifie que votre webdevs de compétence en javascript ne pas venir dans maniable comme beaucoup (il sera utile si vous jouez à JSNI)
  • des problèmes avec l'indexation par les moteurs de recherche - à mon humble avis, cela devrait être le plus grand inconvénient de l'utilisation de GWT, ou pure JS applications web en général. Étant donné que le contenu, mise en page, tout est créé "à la volée" avec JS, le le moteur de recherche ne voient que très court de la page HTML et c'est la que - vous prendre soin de ce en quelque sorte vous-même (par exemple, en utilisant cloaking). Google a enfin a commencé à travailler sur une solution pour cela, toutefois, il ne semble pas intéressant pour moi.
    Mise à jour: Google a enfin abordé ce problème. Cependant, je vais laisser cela comme un compromis parce que la demande crawable exige toujours plus d'efforts que dans d'autres cadres. Au moins, maintenant, nous avons un "standard" de suivre et de ne pas avoir à utiliser certains douteuse techniques (comme le cloaking).
  • il est facile (surtout pour un débutant en GWT, surtout quand la personne vient d'un code HTML/JS fond - sans trop orienté-objet de l'expérience) pour aller tous les "wow, ces "objets" les choses sont tellement cool, permettez-moi de faire tous mes <div>s en objets distincts, qui permettra de rendre le code tout beau et soigné". Bien sûr, je suis sur-l'exagération, mais vous obtenez le point - il est facile d'imaginer qu'une inexpérimentés programmeur pourrait mettre un soufflé Widget avec beaucoup d' Handlers dans chaque cellule de l' FlexTable... Et puis (s), il va perdre beaucoup de temps à se demander pourquoi l'application se sent léthargique ;) tl;dr: il est facile pour les débutants en GWT à rendre leurs applications "bloaty" par l'écriture de code qui semble dans la droite ligne de la documentation/samples/common sens ;) suggèrent

C'est tout pour le compromis je pense - si quelqu'un veut ajouter quelque chose, s'il vous plaît ajouter des commentaires.

Avantages

Maintenant, pour les avantages. Je vais passer certains comme l'internationalisation, la compatibilité inter-navigateur pour gratuit, la facilité d'intégration avec d'autres de Google, bibliothèques, etc, parce qu'ils sont un peu évident et facile à comprendre. Je vais essayer de mettre l'accent sur les moins a souligné, mais tout de même très important de fonctionnalités:

  • le compilateur - maintenant, la plupart des gens à qui j'ai parlé avec sur GWT n'est pas réaliser à quel point incroyable de cette partie de GWT est - pour commencer essayez ce présentation de l'année dernière, Google IO. Le compilateur a la vue de l'ensemble de l'application.

De sorte qu'il peut optimiser une telle chose comme ceci:

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; }
}

..à ceci:

public class ShapeExample implements EntryPoint {
  public void onModuleLoad() {
    Window.alert("Area is 4.0");
  }
}

Et puis dissimuler ce et de minimiser. En outre, ceci est fait de telle façon, qui permet d'obtenir des fichiers plus compressible via gzip.

  • vous êtes à l'aide de Java - si oui ou non vous comme Java, on ne peut le nier que c'est une très bonne orientée objet la langue, qui permet d'écrire faciles à entretenir et de code de tests (quelque chose que je ne pense pas possible pour la mesure avec JavaScript). Si vous suivez quelques bonnes lignes directrices, vous arrivez à un code qui est compréhensible, non seulement pour vous, mais pour les autres, les développeurs. Un autre chose à noter est que tous les les jolis modèles de conception, etc, qui le travail dans le "pur" de Java, ici.
  • une chouette chose à propos de GWT est que vous obtenir des gains de performance et de nouvelles caractéristiques gratuitement avec presque tous les nouvelle version du framework. Depuis c'est Java compilé en JavaScript, il ne prend qu'une recompilation pour bénéficier à partir de la optimisations apportées dans le nouveau compilateur ou d'obtenir de nouvelles fonctionnalités (comme l' accessibilité introduit dans GWT 1.5).
  • débogage - il vaut la peine de mentionner que vous pouvez (et devez :)) déboguer vos applications GWT comme toute autre application Java, à l'aide de votre IDE du débogueur. Et, en général, la Java des débogueurs, j'ai vu sont plus avancé alors leurs JavaScript homologues.
  • UiBinder - alors que ce n'est pas encore "parfait", UiBinder vous permet de concevoir vos Widgets dans une façon simple et intuitive à l'aide de XML (par opposition à la pré-2.0 manière qui vous a forcé à le faire en Java). Mélange de HTML et de GWT de Widgets n'a jamais été aussi facile et amusant ;)
  • travailler avec les CSS - GWT a toujours, bien sûr, a embrassé le CSS, mais avec l'introduction de GWT 2.0 (et UiBinder) ils l'ont pris à un autre niveau. Regardons un fichier CSS à partir d'un "normal" de l'application web - des centaines, si pas des milliers de lignes, difficile de naviguer, certains styles sont redondants, mais il est difficile d'avis que, certains ne sont pas utilisés du tout, ajouter à ce mélange le besoin de plaire IE6/7 et vous obtenez un cauchemar. Avec GWT, vous pouvez le demander à effectuer les mêmes tâches qu'il a fait pour le code JS pour les feuilles de style CSS donc il va éliminer tous les le solde non utilisé des styles CSS, de fusion et le cas échéant, de minimiser et de dissimuler les noms de classe, et beaucoup d'autres (y compris les conditions, les constantes, etc dans vos fichiers CSS). Vous êtes encouragés à garder vos styles dans leur UiBinder de fichiers XML - rend l'organisation et la recherche beaucoup plus facile. Dernier mais non le moindre, vous obtenez une erreur lorsque vous avez mal orthographié un style CSS nom - moins de tracas d'essayer de faire la même chose via Firebug ou un outil similaire
  • OOPHM de Processus en Mode Hébergé, avec cela, ils ont résolu l'un des plus grands inconvénients de GWT - maintenant, vous arrivez à utiliser en Mode Hébergé dans le navigateur de votre choix (si ce choix est Firefox, Safari, IE ou Chrome, mais au moins, vous pouvez utiliser n'importe quelle version vous voulez). La conception de OOPHM vous permet également de faire des trucs sympas comme l'exécution de Windows dans une machine virtuelle, et de se connecter à partir de l'IE, il y à la Mode Hébergé en cours d'exécution sur l'hôte OS (Linux/MacOS) - pas besoin de hacks, de la copie des fichiers après chaque compilation, etc
  • vous obtenez de dire /ˈɡwɪt/ beaucoup ;) (c'est une citation de l'un des présentations sur Google IO 2009, IIRC)
  • beaucoup plus.. regardez les vidéos de Google IO 2009 et naviguez à travers les GWT wiki pour voir plus de choses qui fait de la création de RIA plus facile et moins sujettes à l'erreur avec GWT :)

Entre

En fonction de votre expérience et/ou vos préférences, ce qui suit peut être un avantage (c'est pour moi, mais des fois c'est un pain PITA ;)) ou pas:

  • l'out-of-box collection de Widgets est maintenu petit et simple. Maintenant, si vous êtes en provenance de certains de plein fouet GUI cadre (que ce soit web ou de bureau), vous pourriez être surpris de voir à quel relativement faible, le nombre de Widgets GWT est. Mais selon le GWT est les devs, il est gardé comme ça sur le but - les Widgets de base sont tous les outils/"blocs" dont vous avez besoin pour construire votre propre, adapté à vos besoins Widgets. L'alternative est de fournir une variété de Widgets à l'appui de nombreux cas d'utilisation... Le résultat est un peu lent de l'INTERFACE utilisateur (au moins à mon humble avis - découvrez par vous-même des projets comme SmartGWT ou Ext GWT). C'est-à-dire, les Widgets GWT sont assez joliment écrit - par exemple l' SuggestBox a beaucoup d'endroits où vous pouvez remplacer le comportement par défaut avec vous - même, vous pouvez spécifier un autre moyen d'afficher les suggestions (SuggestBox.SuggestionDisplay), le feu d'une action personnalisée lorsque l'utilisateur sélectionne une suggestion (SuggestBox.SuggestionCallback) ou tout simplement fournir une coutume SuggestOracle pour l'alimentation de l' SuggestBox avec Suggestions...

Ligne du bas est - essayez de GWT, les chances sont que vous allez l'adorer et ne voudront jamais d'écrire en JavaScript jamais ;)

10voto

Dmitry Buzdin Points 782

Nous sommes bâtiment de petite taille (~2K classes Java) à moyenne (~6K) les systèmes d'entreprise sur une base régulière en utilisant GWT depuis la version 1.3 est sortie. Je comprends qu'il y a un ensemble différent de problèmes à résoudre dans le site public, ayant des milliers de clics par seconde, mais je vais essayer de dire à propos de nos plus grands problèmes dans GWT 1.x et comment GWT 2.0 approches.

Navigateur des Fuites de Mémoire IE6 fuites avec GWT sont énormes, IE7 fuites peuvent être compensés avec les périodiques de la page se rafraîchit, IE8 promet la stabilité dans cette région, mais pas encore largement acceptée dans l'entreprise. Et oui, même valide GWT code natif sans JS appels des fuites de mémoire dans certains cas. Surtout lorsque l'INTERFACE utilisateur est complexe et que vous faites beaucoup de Panneau.clear() appels. Il n'y a pas d'outils utiles pour identifier la cause réelle de la fuite à l'instant. Sauf si vous savez comment pirater navigateur lui-même.

Les Performances de rendu , vous devez écrire votre code de l'INTERFACE utilisateur très attentivement, en particulier lors de la construction couramment utilisé des widgets personnalisés. Profonde JavaScript, CSS et DOM la connaissance est toujours nécessaire. Il y a beaucoup de matériaux dans internet sur ce sujet. Vous avez besoin de savoir comment et quand obtenir vers le bas à partir de widget GWT niveau pour diriger les manipulations DOM.

La taille du Contenu Téléchargeable , il était impossible avant 2.0 à split module sur différents téléchargeable morceaux sans avoir "dur" de navigation intégré dans l'application. Mais ce sera clair contexte JavaScript et exigent de la fenêtre de recharger.

L'INTERFACE utilisateur Développeurs Changement de mentalité de l'INTERFACE utilisateur Expérimenté les développeurs ne savent pas Java et la programmation orientée objet. Développeurs Java expérimentés ne sais pas CSS,JS,HTML et n'aime pas la construction de l'INTERFACE utilisateur. L'INTERFACE utilisateur de Liant va dans la bonne direction.

Nous avons fait de la migration 1.3 -> 1.5 -> 1.7 et il a toujours été juste un recompiler et un couple de CSS fixe. GWT 2.0 supprime beaucoup de déprécié code et les approches initiales (structure de projet, GWTShell) et peut être difficile à migrer rapidement. Mais toutes les fonctionnalités de l'air prometteur et sa bonne que Google ont abandonné l'héritage de code à un certain point. Je ne suis pas sûr de la stabilité de la 2.0 si, comme nous n'avons pas encore utilisé dans des projets réels.

Espérons que cette aide.

4voto

John Points 4035

Nous avons une application GWT avec un tas de Sélénium tests d'acceptation. J'ai pensé (comme vous) qu'il serait sûrement être sûr de mise à niveau GWT de 1.7 à 2.0. Et il est - la plupart du temps. L'application fonctionnait toujours la même chose pour "l'homme" des utilisateurs, mais le sélénium tests de tous fauchés. Il y a une version plus récente de Sélénium dans la préparation (en version alpha, avec de nombreux UnsupportedOperations), mais si nous voulons rester avec GWT 2, il semble qu'on ait à renoncer à certains de testabilité. Donc soyez prudent à propos de "l'avenir" à l'épreuve des hypothèses.

Notre décision d'utiliser GWT a été faite il y a des mois, après la comparaison de YUI et ZK. Je suis toujours heureux que nous avons choisi de GWT. Le niveau de soutien sur le site web GWT et la qualité générale de la documentation semble très élevé.

GWT ne module de fractionnement et de l'offre de profilage des performances qui aide à contrer les arguments qu'il n'est pas suffisamment léger.

1voto

Guido Points 11

À propos de votre sujet, vous pouvez trouver un article complet intéressant ici:

http://www.bitstorm.it/blog/fr/2011/05/gwt-google-web-toolkit-frontier-rich-internet-applications-tutorial/

1voto

Pandurang Patil Points 31

J'ai essayé d'ajouter un avantage à utiliser GWT avec mon expérience d'utilisation de GWT pendant un certain temps. vérifiez s'il est bien utilisé http://blog.pandurangpatil.com/2012/09/benefits-of-using-gwt.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X