juin
2009
Il y a de cela un an, j’ai écris un billet sur les faiblesses de GWT pour me faire l’avocat du diable face à l’euphorie ambiante qui régnait alors.
Aujourd’hui, j’aimerai refaire le point sur ces faiblesses, évoquer quelques autres points qui me sont apparus depuis, qui sont en passe d’être corrigés ou qui ne sont pas prêts de l’être.
Vos commentaires sont les bienvenus ici ou sur ce forum.
=> 1 – Le fait de coder en JAVA son IHM
Pas un problème pour ceux qui ont acté que GWT est plus fait pour écrire des applications web que des sites.
Ceci dit, pour ceux qui comme request auraient voulu écrire une ihm en déclaratif, cela semble prévu dans une prochaine release avec UiBinder :
The UiBinder will allow the creation of user interfaces in a declarative fashion.
=> 2 – La gestion de l’historique
Comme l’a dit PochyPoch, c’est un problème dû à un choix technologique (Ajax) et pas au framework qui pour le coup s’en sort plutôt bien.
=> 3 – L’indexation par les moteurs de recherche
Pas un problème pour ceux qui ont acté que GWT est plus fait pour écrire des applications web que des sites.
Pour les autres, cela reste un problème, mais une fois de plus, non spécifique à GWT. Le même problème se pose pour tous sites développés en full javascript.
=> 4 – L’internationalisation
Même si Gwt propose une « petite » solution dynamique, ils mettent en avant leur solution statique. Cette solution statique est du coup celle retenue par des librairies tierces (comme Ext-Gwt). Si vous voulez changer dynamiquement vos libellés sans recharger la page, vous serez bien embêté avec les libellés de la librairie utilisé !
=> 5 – Les modules
Même si certains me disaient le contraire, il y en a eu suffisamment de mon avis chez Google. Pour preuve, l’intégration dans une prochaine release de runAsync pour éviter d’envoyer au client un javascript énorme.
Developer guided code splitting is a mechanism that allows developers to specify asynchronous split points in their code where the code base can be split and downloaded in different chunks. This is currently an R & D project but looks promising.
=> 6 – L’intégration des données des POJO
L’arrivée de GWT 1.5 a mis fin à la dépendance de nos POJO à GWT (via IsSerializable qui n’est plus requis) mais a créer un autre problème.
A cause des annotations JPA/JDO, les POJOs ne peuvent pas être dans la partie cliente ! (a moins de passer par le binding en XML ou d’écrire des Mocked Annotations ?)
Reste la possibilité d’envoyer leur donnée via un « objet de représentation » ou via un flux XML/JSON.
La première solution permet de rester full Java et de profiter du RPC GWT.
La seconde permet une plus grande interopérabilité puisque les données peuvent être servies à d’autres types de client.
=> 7 – Le manque de structuration et l’écosystème de GWT.
Je ne l’avais pas mis dans ma liste initial car pour moi, le manque de structuration m’a permis d’implémenter ma propre architecture.
Ceci reste cependant un manque pour beaucoup car il n’y a pas encore de projet structurant pour le développement d’application GWT.
De plus, si l’écosystème de GWT est plutôt riche, on manque encore de visibilité à long terme sur certaines bibliothèques tierces (parfois développé par un seul individu).
L’affaire du wrapper GWT-Ext n’est sans doute pas anodin non plus dans certaines inquiétudes.
=> 8 – Le mode hosted qui impose son navigateur (IE sous Windows, un vieux Mozilla de 2005 sous Linux) et ses lenteurs.
Bientôt un lointain souvenir puisqu’est prévu OOPHM dans une prochaine release :
In-browser hosted mode will allow GWT developers to debug their apps within an external browser rather than GWT’s hosted mode browser
=> 9 – La lenteur de la fenêtre « Hosted Mode » à son ouverture et la lenteur de la compilation.
Toujours un peu lent mais des progrès ont été accomplis :
- Même si en « Hosted Mode », on pouvait recharger la partie cliente sans fermer la fenêtre, il fallait quand même la fermer pour la partie serveur.
Avec la dernière version (1.6.4), un bouton « Restart Server » nous évite cela. - Les permutations de la compilation peuvent être lancées en parallèle pour ceux disposant d’un processeur multi-coeur.