La keynote GWT Create 2015

Tant attendue...

Arnaud Tournier, le 27-01-2015

La Keynote GWT.create

Présenté par Ray Cromwell.

Retour de Californie, ou la conférence a eu 250 spectateurs, et 444 spectateurs en Europe (interressant non ?), ce qui porte à plus de 656 personnes cette année.

40 sessions, avec parfois 4 sessions en même temps.

Voici le classemeent des sessions issu de la conférence US :

  • Singular,
  • Polymer & Elements
  • Improving HTML table
  • Google Inbox
  • J2ObjC

Pour suivre le planning, rendez-vous sur gwtcreate.com/agenda

La conférence a eu une note de 4/5 en Californie. Mercredi nous aurons un panel des développeurs GWT pour leur poser des questions en direct. Les plus difficiles sont demandées !

Ray Cromwell arrive pour présenter GWT 3

Pour ceux qui ne le savent pas, Ray travaille comme développeur principal de GWT (entre autres). Voilà ce qui s’est passé durant l’année :

  • Sortie de la version 2.7. Le compilateur est maintenant incrémental, le temps de recompilation est simplement dépendant de la taille des modifications,
  • Amélioration des performances, voyez plûtot les graphiques : Passage de GWT au benchmark Octane

  • En taille de fichiers générés, voilà où en est GWT :

Taille des fichiers générés comparés à JS pur

  • Support de GSS,
  • Support expérimental de JsInterop.

SuperDevMode

  • Compilation incrémentale,
  • SourceMaps plus compact et précis,
  • Performances :
    • Emulation de la JRE : opérations sur Map 5 à 8 x plus rapides, String.equals aussi. La construction des stack trace des exceptions est maintenant lazy (alors qu’elle était effectuée systématiquement à chaque try), les opérations de cast sont aussi plus rapides.
    • En termes de taille de code généré, GWT est le plus performant.

Sortie de Java 8 !

Java 8 est sorti officiellement, tant attendu pour des lambdas que tout le monde veut utiliser dans GWT. Les lambdas vont améliorer grandement la productivité du développeur en éliminant une bonne quantité de code-glue qu’il faut écrire pour répondre aux événements (les callbacks sont partout).

Compilateur GSS

  • Google style sheets,
  • Extension avec CSS3,
  • Ajoute variables, extensions, fonctions etc au CSS classique.
  • Fait du linting,
  • Réduit le code généré de 1% par rapport aux GWT Resources

Inbox

Google a fait du bruit récemment avec le nouveau Inbox (remplaçant de Gmail). Depuis pas mal de temps, des rumeurs circulaient sur la mort de GWT. Inbox est une des applications qui montrent le contraire. Et Ray le crie haut et fort !

Pour cette réécriture de GMail, la contrainte mobile a été prise en compte depuis le départ. En effet une part majoritaire de connexions mobiles est maintenant constatée. Les performances côté mobile doivent donc être prises très au sérieux.

Applications hybrides

  • Pas comme Phone Gap. C’est compilé.
  • Google Sheets, Google Inbox.
  • 60% à 70% de réutilisation du code entre les différentes plateformes.

Utilisation de JsInterop

  • La partie gestion est écrite en Java bien sur. Et elle est exposée par JsInterop à la partie UI pour le navigateur.
  • Pour l’UI, c’est écrit en Closure/JS.

J2ObjC

  • Traduit un code Java en Objective C (pour iOS)
  • Lié avec les vues natives développées avec View Logic.

La communauté

  • 25% des patchs écrits par des développeurs qui ne sont pas chez Google,
  • 100k utilisatuers actifs en dehors de Google,
  • Des travaux innovants seront présentés ici par des membres de la communauté.

Le Web a progressé

  • Performances : pour rappel, Chrome 32/FF25 est 2200x plus rapide que Chrome3/FF3.5,
  • Compatibilité : de plus en plus convergents, c’est une bonne nouvelle ! L’approche multi-navigateur va donc changer de philosophie dans GWT (au lieu de niveller par le bas, nos applications testeront la présence de telle ou telle fonctionalité). Mais actuellement, la situation est bien meilleure que des années auparavant (pensez à faire du graphique Canvas dans un Microsoft SVG !!!). Voici un graphique qui montre visuellement la convergence entre les navigateurs du marché :

Convergence des navigateurs

  • Rendu : prise en charge du matériel graphique, les navigateurs peuvent faire de l’affichage à 60fps sans problème.
  • Nouvelle API “Service Workers” qui permettent de faire des applis offline. Comme un serveur Web qui tourne en local…
  • Les WebComponents et Polymer sont maintenant natifs.

Qu’attendre pour 2015 ?

Les lambdas, les lambdas !

Au départ, l’équipe voulait livrer GWT 2.8 avec :

  • Java 8
  • JsInterop, phase 1 production ready,
  • Meilleur débug avec SDM
  • Support GSS par défaut,
  • Compilations plus rapides,
  • Collections plus rapides.

Les contraintes de Java 8

Il faut une JVM 8 pour la compilation, et même si cela n’est pas obligatoire (le projet RetroLambda convertit du Java 8 en Java 7)

JsInterop

  • Finalisation des specs, en phase 1. Après cela les choses vont reposer un peu, puis une nouvelle phase sera lancée.

Débugging

  • Les identifiants Javascript générés par la compilation seront lisibles “humainement”.
  • Une meilleure vue des collections Java dans le débug.

GSS

  • Va complétement remplacer CssResource
  • Sera activé par défaut

Performances

  • La compilation devrat s’améliorer,
  • Performances des collections. Par exemple pour Google Spreadsheet, il y a des millions de cellules et faire des gains en perfs se voit tout de suite. Par exemple ArrayList.get() fait deux fois les tests de boundaries. Au final dans une version future, ces check seront tout simplement éliminés pour la compilation de production.

GWT 3.0

  • Breaking release : les API vont casser !!! GWT va être découpé en plusieurs parties plus petites : events, ui, etc…
  • JsInterop phase 2 : bon départ jusqu’à maintenant, mais encore pas mal de code boiler plate (on peut faire mieux…)
  • Elemental 2.0 : spec WEB.IDL => Java. Etait difficile à mettre à jour. Avec la version 2.0, on fera du reverse engineer en extrayant les API depuis les W3C. Si une nouvelle API sort, on lancera ce petit outil pour être à jour immédiatement.
  • Mort clinique du DevMode !
  • Temps de chargement des apps : DeltaJs et ServiceWorkers out of the box (ou dans MGwt)

JsInterop Phase 2

  • Elimination des restrictions (overloading, varargs, champs non-statiques, non-finaux,
  • Elimination des méthodes JSNI,
  • Idomatic mapping entre Javascript et Java.

Elemental 2.0

  • Constament à jour avec les dernières API. Par exemple une API de push notifications vient de sortir dans Chrome et Firefox. Rebuilder Elemental avec les spec w3.org/TR/push-api, extraction automatique des API (avec la documantation !!!), insère des liens vers tutoriaux (html5rocks.org)

Collections plus rapides

  • Annotation @IterateAsArray : un foreach java sera converti en for( i=0, i<...), ce qui aura pour effet d’accélerer le temps d’execution des boucles.
  • Elimination de l’autoboxing : problème avec les Map etc… Actuellement, le boxing est mimé côté Javascript.

Démarrages plus rapides

  • Les réseaux mobiles sont encore lents dans de nombreux pays,
  • Pourquoi ne pas délivrer les applications GWT par petites parties différentielles, comme des patch delta. Cela est fait pour Chrome par exemple. Donc quand le navigateur va se connecter pour avoir la dernière version, le serveur n’enverra que la différence depuis la version connue du client. NDLR: Il me semble que cela va énormément accélerer les temps de chargement quand une application lourde sera mise à jour. Qui sait si Google utilise déjà cela en interne ?

Les Services Workers

  • Permet d’aller hors-ligne et d’avoir des notifications push.
  • Peut intercepter des requêtes Web,

GWT et les Services Workers

  • Les applications GWT ont une connaissance statique des resources utilisées par votre application (CSS, JS libraries, etc…),
  • GWT fournira automatiquement les services workers avec ses assets.

ES6 Support

  • Faire levier sur les nouvelles API Map et Set pour les émulations JRE des Map et Set. Des expérimentations montrent nous dit Ray que les performances sont globalement doublées.
  • Génération de classes ES6.

Une chose de plus…

En GWT, on est habitués à utiliser le système de Widget, qui a été conçu “à l’époque”.

Daniel Kurka a dans son sac Singular, qui serait un modèle à la Angular Js en Java. Mais sans dirty checking, sans parcours du DOM, tout est fait à la compilation: on pourra passer à l’échelle pour de grosses applications. La taille générée sera aussi plus petite, les perfs meilleurs, et…. Surprise, il faudra venir à la session de Daniel !!! Le buzz est fait ;)

Questions

Le système de permutation pour les navigateurs vont-elles disparaître ?

En un sens oui (2 permutations : une pour les browsers modernes, une pour les autres). Mais ce système existera donc toujours.

Les sessions à suivre

History of GWT

Joel Webber, l’inventeur de GWT, va faire une revue de ce qui s’est passé sur GWT depuis ses premières lignes…

  • 50% du traffic est maintenant mobile,
  • Les apps natives ont influencés les utilisateur à avoir des applis fluides, avec une très bonne ergonomie.

Arnaud Tournier, le 27-01-2015