[Be-Zend 2015] GWT, le java et le javascript n’ont jamais été aussi proches
Aujourd’hui, on prend un café et on part sur le dos de notre ami le rhinocéros ! Non, je ne suis pas devenu fou (je l’étais bien avant :)). Pour revenir au sujet de cet article, je faisais référence au Java et au Javascript (leurs logos). En effet, c’est au tour de la conférence sur GWT d’être présentée ici. Elle a été réalisée par Arnaud Tournier (LTEConsulting) lors de la 8ème édition de Be-Zend. En plus de résumer la conférence, je vais également donner mon avis sur cette techno qui m’a fait réfléchir sur son intérêt et son avenir (en étant du côté concurrent).
- GWT, c’est quoi ? Dans quel but ? Ça vient d’où ? En quoi ça consiste ?
- Quand utiliser GWT ? Qu’offre-t-il de plus que Javascript ?
- Qu’y a-t-il sous le capot de GWT ?
- Et demain, on en fait quoi ?
GWT, c’est quoi ? Dans quel but ? Ça vient d’où ? En quoi ça consiste ?
GWT (ou Google Web Toolkit) c’est un moyen de faire du Javascript pour le web en codant avec Java. Il y a deux buts derrière cette démarche : améliorer la productivité des développeurs et de meilleures performances pour les utilisateurs. De plus, il est bien plus simple de trouver des développeurs Java que des développeurs Javascript (et j’entends par là qu’il est rare de trouver des développeurs js qui vont plus loin que la sélection d’éléments dans le DOM et de deux ou trois conditions).
GWT a été écrit par Bruce Johnson et open sourcé par Google en 2006. À présent, c’est un comité mixte qui pilote le projet (toujours Google mais on notera par exemple la présence de RedHat et d’autres grands noms). Déjà utilisé dans de nombreuses applications web (comme dans Google Spreadsheet), GWT possède également une communauté réactive.
Au niveau du concept, il est simple. On écrit du code Java qui sera ensuite compilé pour en ressortir du code Javascript. Mais ce n’est pas tout ! En effet, GWT rend accessible une partie de la JCL (il émule via du code Javascript le fonctionnement de certaines classes pour les rendre utilisables). Plusieurs versions du code seront également générées dans le but de s’adapter à chaque navigateurs existants et d’exploiter au mieux chacune de leurs spécificités. Comme tout bon outil de développement, GWT donne accès à des fonctionnalités indispensables comme un système de traduction (I18N), une gestion des ressources optimisées (images), du code splitting (séparation du code dans de multiple fichier), etc.
Quand utiliser GWT ? Qu’offre-t-il de plus que Javascript ?
GWT est déjà exploités dans le cas d’applications web (d’une complexité importante), dans des applications hybrides et dans des applications métiers. De mon point de vue, son point fort réside dans les applications hybrides. Lorsque le problème se pose de développer des applications mobiles, un site web et un logiciel, il devient intéressant de centraliser le maximum de code possible. C’est là que GWT peut faire la différence. En effet, il est possible de développer une base commune en java pour toutes ses applications. Par la suite, ce code sera compilé par différents outils (GWT pour le web, ASDK pour android, etc) pour s’adapter à chaque plateforme et il n’y aura plus qu’à appliquer des modifications d’UI ou quelques fixes éventuels par support.
Quels sont les avantages de GWT sur Javascript ? On peut commencer par le typage de Java qui est obligatoire à contrario de celui de Javascript qui est très peu présent. Il est indéniable que c’est un atout majeur pour les projets conséquents. L’écosystème riche de Java s’ajoute également à celui du Javascript. Comme mentionné précédemment, le monde ne manque pas de développeurs Java et sa communauté est réactive. Il offre également un protocole supplémentaire pour communiquer avec votre serveur (GWT RPC) sans pour autant vous y contraindre.
Qu’y a-t-il sous le capot de GWT ?
En premier lieu et c’est une évidence, il y a le compilateur Java vers Javascript. Ensuite, on y retrouve:
- La gestion de la permutation du code distribué en fonction du navigateur de l’utilisateur.
- DeferredBinding qui permet de générer les différentes versions distribuées du code.
- JSNI offrant la possibilité d’inclure du code Javascript avec le code Java (comme des librairies externes, ex: JQuery).
- Code splitting qui découpe le code en plusieurs sous fichiers permettant ainsi d’alléger le temps de chargement.
- La compilation incrémentale qui permet de ne recompiler que la partie modifiée.
- La génération des SourcesMaps permettant ainsi de faire le lien entre les fichiers générés et les fichiers sources directement depuis le navigateur.
Côté optimisations, on a également plusieurs éléments utiles:
- La permutation mentionnée juste au-dessus.
- La gestion des images qui permet par exemple de manager la génération et l’utilisation de sprites.
- Code splitting (mentionné également au-dessus) il permet de ne charger que les éléments du code qui sont nécessaires ce qui donne un gain sur le réseau (voir schema).
- Optimisation de code dans le but dans diminuer la quantité et la complexité (exemple d’un code réduit).
On y retrouvera également des librairies facilitant le développement comme hexa.tools qui offre la fonctionnalité de data binding (mise à jour du DOM en fonction de la valeur d’une variable dans le code).
Et demain, on en fait quoi ?
Même si GWT semble être une solution miracle pour le développement multiplateforme, il faut garder à l’esprit qu’elle date de 2006 et que certains besoins de l’époque ne sont plus à l’ordre du jour. Par exemple, la génération de codes dédiés à chaque navigateurs se révèle un avantage amoindri avec le temps dû à une harmonisation de ces derniers (on ne vise personne … IE … *tousse*). De plus, le javascript et les outils gravitant autour ont évolué. On peut ainsi citer :
- Typescript de chez Microsoft.
- Dart de chez Google.
- CoffeeScript initié par Jeremy Ashkenas.
Ces derniers proposent de faire évoluer la syntaxe de Javascript afin de faciliter le développement d’applications complexes. Un effet de mode entraîne également le Javascript vers le multiplateforme (cordova, react native, nodeJS, etc).
De ce fait, je pense que GWT a encore quelques années devant lui pour s’épanouir même si la relève est déjà en chemin.
Pour terminer, je soulèverai un dernier point: Arnaud a fait remarquer que la courbe d’apprentissage est dense mais qu’une fois les connaissances acquises, le développement se révèle rapide. Et là, avec une démo en direct pour le prouver, je ne peux qu’approuver … Avec Eclipse et quelques minutes, il a réalisé une application web affichant des articles (écris en dur) que l’on pouvait modifier puis enregistrer. Si je n’étais pas tomber amoureux de Javascript et de ses prototypes, j’aurai sûrement franchi le pas :p.
Vous pouvez retrouver l’intégralité des slides sur le site de LTEConsulting.
Commentaires récents