1. Le futur de GWT
Ce que nous proposera la version 3.0…
(c) LTE Consulting - Tous droits de reproduction interdits 1
GDG Saint-Quentin, 20 Mars 2014
2. GWT aujourd’hui
100.000 développeurs utilisent GWT dans le monde
En interne chez Google : 1000 développeurs
Ecosystème dynamique
(c) LTE Consulting - Tous droits de reproduction interdits 2
3. Les nouveautés prévues pour GWT 3
Compatibilité avec Java 8
Les lambdas sont très attendues !
Amélioration du code JavaScript généré
Plus adapté aux navigateurs modernes.
Prise en charge de CSS3 (GSSResource)
Prise en charge du modèle FlexBox
JsInterop
Le vieux DevMode est mort…
(c) LTE Consulting - Tous droits de reproduction interdits 3
4. Les Lambdas
(c) LTE Consulting - Tous droits de reproduction interdits 4
ok.addClickHandler( new ClickHandler() {
@Override
public void onClick( ClickEvent event ) {
sendChange();
}
} );
5. Les Lambdas
(c) LTE Consulting - Tous droits de reproduction interdits 5
ok.addClickHandler( new ClickHandler() {
@Override
public void onClick( ClickEvent event ) {
sendChange();
}
} );
6. Les Lambdas
(c) LTE Consulting - Tous droits de reproduction interdits 6
ok.addClickHandler( (event) -> sendChange() );
Et en javascript…
ok.addClickHandler( function (event) { sendChange(); } );
7. Retour aux raisons de
GWT
(c) LTE Consulting - Tous droits de reproduction interdits 7
8. Quelques raisons…
En 2006, l’écosystème des navigateurs est un enfer
Problèmes de compatibilité (trop de disparités => JQuery)
Non respect des standards
Fuites mémoire entre le DOM et le JavaScript
Il est difficile en s’appuyant sur le DOM de construire une hiérarchie de
Widgets.
Pourtant les VM JavaScripts montent déjà en puissance et permettent de
créer de vraies applications (ex : gmail)
(c) LTE Consulting - Tous droits de reproduction interdits 8
9. Et aujourd’hui ?
Les standards du Web évoluent très vite,
Les navigateurs sont beaucoup plus homogènes,
Plus puissants,
Avec mises à jour automatiques.
Le standard des Web Components va permettre de créer de la structure à bas
niveau (DOM).
(c) LTE Consulting - Tous droits de reproduction interdits 9
10. Les Web Components
Qui sont-ils ?
(c) LTE Consulting - Tous droits de reproduction interdits 10
11. Ils arrivent, qui sont-ils ?
En fait un ensemble cohérent de plusieurs standards :
Shadow DOM :
Encapsulation de nœuds DOM
Etanchéité CSS
HTML Templates
Des modèles DOM, non parsés avant utilisation
Custom Elements
Possibilité de créer de vrais nouveaux éléments HTML
Possibilité d’ajouter des fonctionnalités à des éléments existants
HTML Imports
Importation d’unités HTML + CSS + JavaScript
Object Observer, etc…
(c) LTE Consulting - Tous droits de reproduction interdits 11
12. Future tendance du développement Web
Il est maintenant possible d’encapsuler ses Widgets directement en HTML,
Ils sont intégrables dans un document, sans pour autant polluer celui-ci.
On peut donc faire des « Widgets » directement en HTML
De nouveaux outils de développement vont émerger. Ceux-ci combleront le
vide laissé par les éditeurs Flex entre autres…
GWT doit donc s’adapter et s’intégrer complètement dans cette mouvance.
(c) LTE Consulting - Tous droits de reproduction interdits 12
13. Nextgen JSInterop
La nouvelle couche d’interopérabilité GWT / JavaScript
(c) LTE Consulting - Tous droits de reproduction interdits 13
14. Pourquoi une nouvelle couche ?
Le code JSNI est trop fastidieux à écrire…
Le standard Web va offrir nativement un grand nombre de fonctionnalités
haut-niveau proposées par des outils comme JQuery, AngularJS, etc.
Il sera donc beaucoup plus fréquent d’intégrer des bibliothèques natives
JavaScript (bibliothèques de Web Components par exemple).
GWT pourra jouer le rôle de « glue » applicative.
Pour conserver une bonne productivité, GWT se doit donc d’offrir une
intégration avec JavaScript encore plus transparente !
(c) LTE Consulting - Tous droits de reproduction interdits 14
15. Une petite piqûre de rappel au sujet de
JSNI…
(c) LTE Consulting - Tous droits de reproduction interdits 15
public class DOMImpl {
public native EventTarget getCurrentTarget()
/*-{
return this.currentTarget;
}-*/;
public final native int getKeyCode() /*-{
return this.keyCode;
}-*/;
public native boolean getMetaKey() /*-{
return evt.metaKey;
}-*/;
}
16. Et au sujet des JavaScriptObject
(représentation Java d’objets Javascript natifs)
(c) LTE Consulting - Tous droits de reproduction interdits 16
public class Element extends Node {
protected Element() {
}
public final native double getScrollTop() /*-{
return this.scrollTop;
}-*/;
public final native double getScrollWidth() /*-{
return this.scrollWidth;
}-*/;
}
17. Inconvénients principaux des JSO
On ne peut les construire depuis Java (pas de new…),
Toutes leurs méthodes doivent être finales (pas de polymorphisme),
Une interface Java ne peut être implémentée que par UNE seule classe JSO,
On ne peut étendre des objets JavaScript.
Lorsque l’on wrappe une bibliothèque JavaScript, la plupart du code écrit est
de la « glue » syntaxique…
(c) LTE Consulting - Tous droits de reproduction interdits 17
18. Quelques éléments du futur JSNI
(c) LTE Consulting - Tous droits de reproduction interdits 18
19. @JsInterface
Définit le contrat d’un objet Javascript
(c) LTE Consulting - Tous droits de reproduction interdits 19
@JsInterface
interface JQueryDialog
{
void setProperty( String parameter, Object value );
void show();
}
20. @JsInterface( prototype = « … » )
Spécifier le prototype Javascript
(c) LTE Consulting - Tous droits de reproduction interdits 20
@JsInterface(prototype = "HTMLElement")
public interface HTMLElement
{
void setAttribute(String name, String value);
<T extends HTMLElement> void appendChild( T element );
@JsProperty void setInnerText( String html );
}
class MyCustomElement extends HTMLElement.Prototype
{
…
}
21. @JsProperty
Accès aux champs d’un objet Javascript
(c) LTE Consulting - Tous droits de reproduction interdits 21
@JsInterface
public interface HTMLElement {
void setAttribute(String atr, String value);
<T extends HTMLElement> void appendChild( T element );
@JsProperty void setInnerText( String html );
@JsProperty String getInnerText();
}
22. Et d’autres encore…
Les méthodes par défaut d’interface de Java 8
GWT.jsni( « … » ) pour faciliter l’émission de code JavaScript
@JsExport pour exporter des prototypes dans le scope JavaScript
@JsConvert pour les conversions de type
@JsAware, @JsWrapper, JsObject, JsArray, etc.
(c) LTE Consulting - Tous droits de reproduction interdits 22
23. Et le mode Dev ?
Un candidat remplaçant ?
(c) LTE Consulting - Tous droits de reproduction interdits 23
24. Disparition du mode dev
NPAPI, l’api défunte.
Super Dev Mode :
Compilation brouillon très rapide.
Débogage dans le navigateur grâce à Source Maps.
Perte de productivité énorme.
Réflexions autour d’une alternative
Mode Dev en JavaScript,
SourceMap debugger pour Eclipse
(c) LTE Consulting - Tous droits de reproduction interdits 24
25. Architecture du SuperDevMode
(c) LTE Consulting - Tous droits de reproduction interdits 25
IDE Compilation Navigateur
Code JavaScript
Info Debug
Code Java
Outil de
débogage du
navigateur
26. Probable architecture du prochain mode
de développement
(c) LTE Consulting - Tous droits de reproduction interdits 26
IDE Compilation Navigateur
Code JavaScript
Info Debug
Code Java
Debugger
Plugin de
Débogage
API de Débogage
du navigateur
27. Merci !
(c) LTE Consulting - Tous droits de reproduction interdits 27
Twitter : @ltearno