Google App Engine Une introduction L’infrastructure de Google pour servir vos applications.
Agenda Les applications en ligne et la montée en charge AppEngine : solution intégrée sur l’infrastructure Google Les diff...
Evolutions typiques d’une appplication en ligne 1
Evolutions typiques d’une appplication en ligne 2
Evolutions typiques d’une appplication en ligne 3
Evolutions typiques d’une appplication en ligne 5 …
LiveJournal circa 2007 "LiveJournal: Behind the Scenes“ par Brad Fitzpatrick's USENIX '07 talk:
Beaucoup de travail et d’itérations… <ul><li>Une application en ligne signifie :  </li></ul><ul><ul><li>Prévision des évol...
Google App Engine Ecrire une application capable de servir gratuitement 5 000 000 pages vues / mois. L’infrastructure Goog...
Google App Engine : Les éléments clés du design  <ul><ul><li>Utiliser les technologies mises au point par Google </li></ul...
<ul><ul><li>Promouvoir l’usage d’applications sans états  </li></ul></ul><ul><ul><li>Promouvoir la création de services sp...
LiveJournal circa 2007 Frontends Storage Application Servers Memcache Static File Servers &quot;LiveJournal: Behind the Sc...
Architecture générale
Profitez de l’infrastructure Google Traitements Parrallèles Montée en charge prévue dès le départ Disponibilité globale Co...
Pour quels types d’application ? Des utilisateurs authentifiés, des droits d’accès Des données propres à ces utilisateurs ...
Pourquoi Google App Engine ? <ul><ul><li>Montée en charge </li></ul></ul><ul><ul><li>Performance </li></ul></ul><ul><ul><l...
Un exemple Poser des questions au président Obama  via une application sur AppEngine.
Ces derniers 18 mois… Apr 2008 Support de Python May 2008 Memcache, Images API Jul 2008 Logs export Aug 2008 Batch write/d...
Java ou Python ? Vous êtes libres ! La même infrastructure Les mêmes services spécialisés La même console d’administration
Ou un autre langage ? <ul><ul><li>La communauté a implémenté le support d’autres langages via la JVM </li></ul></ul><ul><l...
Une console d’administration unique
Un contrôle détaillé des ressources consommées Deux types de quotas : fixes & facturables Ces quotas sont calculés sur une...
Les ressources mesurées http://code.google.com/appengine/docs/quotas.html
Définir ses structures de données <ul><ul><li>Dans le Datastore on peut stocker des entités. </li></ul></ul><ul><ul><li>Un...
Le stockage de données s’appuie sur BigTable Sort Machine #2 Machine #3 Machine #1 <ul><li>Big Table n’est pas : </li></ul...
Récupérer les données via le bon index <ul><ul><li>SELECT * FROM Grandparent </li></ul></ul><ul><ul><li>Kind index </li></...
Requêtes sur une propriété <ul><ul><li>WHERE name >= 'B' and name < 'C' ORDER BY name </li></ul></ul><ul><ul><li>RANGE = [...
Comment créer les index ?  <ul><ul><li>La configuration des index se fait via un fichier XML. </li></ul></ul><ul><ul><li>L...
Concevoir le modèle de données <ul><ul><li>Critère de comparaison sur une seule propriété à la fois </li></ul></ul><ul><ul...
URL Fetch & Memcache <ul><li>Récupérer du contenu de serveur à serveur </li></ul><ul><li>En Java, utiliser  java.net.URLCo...
Images et messagerie Pour les envois, on utilise  JavaMail (javax.mail) L’expéditeur est le compte administrateur Une URL ...
Votre application se connecte aux messageries instantannées compatibles XMPP (Google Talk) Une URL particulière traite les...
Traitements réguliers : CRON cron: - description: daily summary job   url: /tasks/summary   schedule: every 24 hours - des...
Pour les traitements lourds : Tâches et files d’attente (expérimental) <ul><li>Pour les traitement lourds : </li></ul><ul>...
Ajouts récents Import et export de masse  (expérimental en python) Secure Data Connector : Accès sécurisé à vos données en...
Démarrer en douceur…. <ul><li>L’application typiquement gratuite : </li></ul><ul><ul><li>500 Mo de stockage </li></ul></ul...
Ressources:  code.google.com/appengine code.google.com/p/googleappengine http://groups.google.com/group/                  ...
Appengine+GWT : l’intégration complète +
AJAX... C’est quoi ? <ul><ul><li>A synchronous  J avaScript  A nd  X ML </li></ul></ul><ul><ul><li>JavaScript permet de fa...
La changement de point de vue Ajax
La dérive à éviter <ul><ul><li>Un petit bout de script pour faire un effet sympathique </li></ul></ul><ul><ul><li>Un succè...
Google Web Toolkit : l’objectif  Enrichir l’expérience des internautes en permettant aux développeurs d’utiliser les outil...
Google Web Toolkit pour faire court Ecrivez l’application dans votre environnement de développement Java favori (netbeans,...
Google Web Toolkit : les fonctionnalités <ul><li>Librairies compatibles avec tous les navigateurs : </li></ul><ul><ul><li>...
Comment çà marche ?
Code against Java UI libraries Google Web Toolkit Weekly Report 09/01/2008 - 09/08/200   Google Web Toolkit Weekly Report ...
Code against Java UI libraries The compiler translates Java source to highly-optimized JS Comment çà marche ?
Code against Java UI libraries The compiler translates Java source to highly-optimized JS Generates browser-compliant JS +...
A chacun son code optimisé Optimisé pour le développeur Optimisé pour chaque navigateur
Les Avantages GWT : des applications performantes Le code est optimisé pour chaque navigateur Le code évite les fuites mém...
Deferred Binding en image
Les Avantages GWT : support de l’historique du navigateur tabPanel.add( new  HTML( &quot;<h1>Page 1 Content</h1>&quot; ), ...
Les Avantages GWT : des développements plus rapides <ul><li>Toutes les fonctionnalités des IDE sont disponibles </li></ul>...
Pour résumer  <ul><li>Google Web Toolkit est la solution idéale, car : </li></ul><ul><li>Les applications Ajax produites s...
Les librairies existantes <ul><ul><li>GWT  ( http://code.google.com/webtoolkit/ )   </li></ul></ul><ul><ul><li>Incubator  ...
GWT 2.0 : chargement progressif Size of Initial JavaScript Download (KB) 375 750 1125 1500 0 7x Decrease In Initial Downlo...
Developer-guided code splitting with runAsync public void  onMySettingsLinkClicked()   { GWT.runAsync( new  RunAsyncCallba...
GWT 2.0: ImageBundle Pour afficher 11 images, on ne va pas charger 11 fichiers différents, mais un seul
Qui utilise GWT ?
Google Wave
Google Health
Mobile
Lombardi Blueprint Google Web Toolkit
ContactOffice Google Web Toolkit
Faites un tour dans la galerie GWT ! Google Web Toolkit http://gwtgallery.appspot.com/
Prochain SlideShare
Chargement dans…5
×

GtugDakar AppEngine, Gwt

2 042 vues

Publié le

Une introduction à certaines technologies/services de Google .

Publié dans : Technologie, Business
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 042
Sur SlideShare
0
Issues des intégrations
0
Intégrations
185
Actions
Partages
0
Téléchargements
35
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • CONFIG PATH OF REQUEST SCALABLE your DB is consuming resources that you could be using to serve traffic RELIABLE Next step?
  • CONFIG PATH OF REQUEST SCALABLE your DB is consuming resources that you could be using to serve traffic RELIABLE Next step?
  • CONFIG PATH OF REQUEST SCALABLE your DB is consuming resources that you could be using to serve traffic RELIABLE Next step?
  • CONFIG PATH OF REQUEST SCALABLE your DB is consuming resources that you could be using to serve traffic RELIABLE Next step?
  • Brad Fitzpatrick presented the LiveJournal LAMP stack in his talk at USENIX &apos;07 - similar to app engine But let&apos;s take a step back and look at the steps that most developers, including those at LiveJournal take to get to this stage.
  • We learned the hard way how to make webapps scale. We have a lot of experience with this stuff It led us to have these design motivations. explain statelessness and specialization
  • Brad Fitzpatrick presented the LiveJournal LAMP stack in his talk at USENIX &apos;07 - similar to app engine But let&apos;s take a step back and look at the steps that most developers, including those at LiveJournal take to get to this stage.
  • * Here is a high level view of the Google App Engine Stack - standard web three tier topology - Go over components and what they do * Frontend * Application (app) Servers * App Master * Memcache - distributed in-memory cache. Good  * Datastore * various other apis - There&apos;s a lot of stuff going on here, so let&apos;s start with a familiar example ___________________ different art here primary colors are distracting Explain what memcache is and what it&apos;s good for
  • Beneficios son los mismos del python
  • I&apos;m guessing most people have a rough idea of what GWT can do, but I want to quickly hit the hight points on this slide having way too much text.
  • I&apos;m guessing most people have a rough idea of what GWT can do, but I want to quickly hit the hight points on this slide having way too much text.
  • GtugDakar AppEngine, Gwt

    1. 1. Google App Engine Une introduction L’infrastructure de Google pour servir vos applications.
    2. 2. Agenda Les applications en ligne et la montée en charge AppEngine : solution intégrée sur l’infrastructure Google Les différents services Google Web Toolkit l’intégration complète - le principe - la version 2.0 - qui l’utilise
    3. 3. Evolutions typiques d’une appplication en ligne 1
    4. 4. Evolutions typiques d’une appplication en ligne 2
    5. 5. Evolutions typiques d’une appplication en ligne 3
    6. 6. Evolutions typiques d’une appplication en ligne 5 …
    7. 7. LiveJournal circa 2007 &quot;LiveJournal: Behind the Scenes“ par Brad Fitzpatrick's USENIX '07 talk:
    8. 8. Beaucoup de travail et d’itérations… <ul><li>Une application en ligne signifie : </li></ul><ul><ul><li>Prévision des évolutions de traffic et d’usage </li></ul></ul><ul><ul><li>Planifier les ressources pour les montées en charge </li></ul></ul><ul><ul><li>Mise à jour et applications des patchs logiciels </li></ul></ul><ul><ul><li>Des personnes dédiées à l’exploitation </li></ul></ul><ul><ul><li>Licenses des services </li></ul></ul><ul><ul><li>Montées de version </li></ul></ul>
    9. 9. Google App Engine Ecrire une application capable de servir gratuitement 5 000 000 pages vues / mois. L’infrastructure Google accueille votre application et gère les authentifications, la montée en charge, la distribution des ressources, etc…
    10. 10. Google App Engine : Les éléments clés du design <ul><ul><li>Utiliser les technologies mises au point par Google </li></ul></ul><ul><ul><li>Fournir un environnement intégré </li></ul></ul><ul><ul><li>Données distribuées </li></ul></ul><ul><ul><li>Des services spécialisés </li></ul></ul><ul><ul><li>Séparation étanche entre les applications </li></ul></ul>
    11. 11. <ul><ul><li>Promouvoir l’usage d’applications sans états </li></ul></ul><ul><ul><li>Promouvoir la création de services spécialisés </li></ul></ul><ul><ul><li>Traiter beaucoup de requêtes “légères” </li></ul></ul><ul><ul><li>Encourager les réponses rapides </li></ul></ul>Google App Engine : Les bonnes pratiques
    12. 12. LiveJournal circa 2007 Frontends Storage Application Servers Memcache Static File Servers &quot;LiveJournal: Behind the Scenes“ par Brad Fitzpatrick's USENIX '07 talk:
    13. 13. Architecture générale
    14. 14. Profitez de l’infrastructure Google Traitements Parrallèles Montée en charge prévue dès le départ Disponibilité globale Configuration automatique (donc pas de configuration) Sécurisation des applications par défaut
    15. 15. Pour quels types d’application ? Des utilisateurs authentifiés, des droits d’accès Des données propres à ces utilisateurs Des interfaces WEB pour manipuler et présenter celles-ci. Un grand nombre de consultations et de mises à jour simples Quelques traitements lourds en tâche de fond Des interconnexions internet ou intranet
    16. 16. Pourquoi Google App Engine ? <ul><ul><li>Montée en charge </li></ul></ul><ul><ul><li>Performance </li></ul></ul><ul><ul><li>Standards </li></ul></ul><ul><ul><li>Coûts réduits </li></ul></ul><ul><ul><li>Intégration </li></ul></ul><ul><ul><li>Services </li></ul></ul><ul><ul><li>Distribution </li></ul></ul>
    17. 17. Un exemple Poser des questions au président Obama via une application sur AppEngine.
    18. 18. Ces derniers 18 mois… Apr 2008 Support de Python May 2008 Memcache, Images API Jul 2008 Logs export Aug 2008 Batch write/delete Oct 2008 HTTPS support Dec 2008 Console d’administration, Quotas Feb 2009 Facturation, Fichiers + gros Apr 2009 Support de Java , DB import, cron, SDC May 2009 Key-only queries Jun 2009 Task queues Aug 2009 Kindless queries Sep 2009 XMPP Oct 2009 Incoming Email
    19. 19. Java ou Python ? Vous êtes libres ! La même infrastructure Les mêmes services spécialisés La même console d’administration
    20. 20. Ou un autre langage ? <ul><ul><li>La communauté a implémenté le support d’autres langages via la JVM </li></ul></ul><ul><li>Java </li></ul><ul><li>Scala </li></ul><ul><li>JRuby (Ruby) </li></ul><ul><li>Groovy </li></ul><ul><li>Quercus (PHP) </li></ul><ul><li>Rhino (JavaScript) </li></ul><ul><li>Jython (Python) </li></ul>Duke, the Java mascot Copyright © Sun Microsystems Inc., all rights reserved.
    21. 21. Une console d’administration unique
    22. 22. Un contrôle détaillé des ressources consommées Deux types de quotas : fixes & facturables Ces quotas sont calculés sur une période de 24h On contrôle en plus la consommation de ressources par minute Vous définissez un budget quotidien pour les quotas facturables Les APIs permettent de connaître l’état de son compte à tout instant
    23. 23. Les ressources mesurées http://code.google.com/appengine/docs/quotas.html
    24. 24. Définir ses structures de données <ul><ul><li>Dans le Datastore on peut stocker des entités. </li></ul></ul><ul><ul><li>Une entité se définit par : </li></ul></ul><ul><ul><li>Son genre (Kind) </li></ul></ul><ul><ul><li>Son identifiant </li></ul></ul><ul><ul><li>Un ensemble de propriétés </li></ul></ul><ul><ul><li>On peut exécuter des requêtes sur les entités d’un genre donné avec des critères sur les valeurs des différentes propriétés et un ordre de tri. </li></ul></ul><ul><ul><li>AppEngine maintient un index pour chaque type de requête qu’on peut exécuter dans l’application. </li></ul></ul>
    25. 25. Le stockage de données s’appuie sur BigTable Sort Machine #2 Machine #3 Machine #1 <ul><li>Big Table n’est pas : </li></ul><ul><ul><li>Une base de données </li></ul></ul><ul><ul><li>Une base de données distribuée </li></ul></ul><ul><li>Mais plutôt : </li></ul><ul><ul><li>Un tableau trié réparti sur plusieurs machines </li></ul></ul>
    26. 26. Récupérer les données via le bon index <ul><ul><li>SELECT * FROM Grandparent </li></ul></ul><ul><ul><li>Kind index </li></ul></ul><ul><ul><li>Prefix = Grandparent </li></ul></ul><ul><ul><li>Scan! </li></ul></ul>
    27. 27. Requêtes sur une propriété <ul><ul><li>WHERE name >= 'B' and name < 'C' ORDER BY name </li></ul></ul><ul><ul><li>RANGE = [Parent name B, Parent name C) </li></ul></ul><ul><ul><li>Scan!  </li></ul></ul>
    28. 28. Comment créer les index ? <ul><ul><li>La configuration des index se fait via un fichier XML. </li></ul></ul><ul><ul><li>L’environnement de développement génère le fichier de configuration adéquat en fonction des requêtes exécutées par l’application. </li></ul></ul>
    29. 29. Concevoir le modèle de données <ul><ul><li>Critère de comparaison sur une seule propriété à la fois </li></ul></ul><ul><ul><li>Toutes les entités d’un même genre n’ont pas forcément les mêmes propriétés. On ne peut pas mettre un critère sur une propriété qui n’est pas définie. </li></ul></ul><ul><ul><li>Si on a un critère d’inégalité, il faut trier la réponse selon ce critère </li></ul></ul>SELECT * FROM Person WHERE birth_year >= :min AND birth_year <= :max SELECT * FROM Person WHERE birth_year >= :min AND height <= :maxHeight OUI NON
    30. 30. URL Fetch & Memcache <ul><li>Récupérer du contenu de serveur à serveur </li></ul><ul><li>En Java, utiliser  java.net.URLConnection  </li></ul><ul><li>Fonctionne en HTTPS et en POST </li></ul>Mémoire cache distribuée persistente Cache optimiste Service stable, robuste et très spécialisé
    31. 31. Images et messagerie Pour les envois, on utilise  JavaMail (javax.mail) L’expéditeur est le compte administrateur Une URL particulière reçoit le courrier entrant Stockez les images. Transformez les ! (rotation, translation, « j’ai de la chance »)
    32. 32. Votre application se connecte aux messageries instantannées compatibles XMPP (Google Talk) Une URL particulière traite les messages entrants anything @ app-id .appspotchat.com [email_address] Messagerie instantannée
    33. 33. Traitements réguliers : CRON cron: - description: daily summary job   url: /tasks/summary   schedule: every 24 hours - description: monday morning mailout   url: /mail/weekly   schedule: every monday 9:00   timezone: Australia/NSW Planifiez l’appel d’URL
    34. 34. Pour les traitements lourds : Tâches et files d’attente (expérimental) <ul><li>Pour les traitement lourds : </li></ul><ul><ul><li>Découper le traitement en tâches </li></ul></ul><ul><ul><li>Confiez les tâches à des files d’attente </li></ul></ul><ul><ul><li>Les tâches seront effectuées plus tard : </li></ul></ul><ul><ul><ul><li>En fonction des ressources disponibles </li></ul></ul></ul><ul><ul><ul><li>De vos priorités </li></ul></ul></ul>
    35. 35. Ajouts récents Import et export de masse (expérimental en python) Secure Data Connector : Accès sécurisé à vos données en intranet
    36. 36. Démarrer en douceur…. <ul><li>L’application typiquement gratuite : </li></ul><ul><ul><li>500 Mo de stockage </li></ul></ul><ul><ul><li>2 Go par jour de bande passante </li></ul></ul><ul><ul><li>~5M page vues par mois </li></ul></ul><ul><ul><li>6.5 heures de CPU par jour </li></ul></ul><ul><ul><li>1 Go storage </li></ul></ul><ul><ul><li>650 000 URL Fetch calls </li></ul></ul><ul><ul><li>2,000 emails </li></ul></ul><ul><ul><li>1 Go de bande passante par jour </li></ul></ul><ul><ul><li>N tâches </li></ul></ul>
    37. 37. Ressources: code.google.com/appengine code.google.com/p/googleappengine http://groups.google.com/group/                                 google-appengine                                 google-appengine-java                                 google-appengine-python http://appgallery.appspot.com
    38. 38. Appengine+GWT : l’intégration complète +
    39. 39. AJAX... C’est quoi ? <ul><ul><li>A synchronous J avaScript A nd X ML </li></ul></ul><ul><ul><li>JavaScript permet de faire des appels serveurs asynchrones </li></ul></ul><ul><ul><li>JavaScript permet ensuite de modifier le contenu de la page avec les éléments récupérés </li></ul></ul>
    40. 40. La changement de point de vue Ajax
    41. 41. La dérive à éviter <ul><ul><li>Un petit bout de script pour faire un effet sympathique </li></ul></ul><ul><ul><li>Un succès inattendu qui appelle plus de fonctionnalités </li></ul></ul><ul><ul><li>De plus en plus de développements Ajax </li></ul></ul><ul><ul><li>Prise en compte de plus en plus de navigateurs </li></ul></ul><ul><ul><li>Hum.. Çà commence à rudement se compliquer ! </li></ul></ul><ul><ul><li>Result: “Un code spaghetti” </li></ul></ul>
    42. 42. Google Web Toolkit : l’objectif Enrichir l’expérience des internautes en permettant aux développeurs d’utiliser les outils Java pour construire des applications AJAX supportées par tous les navigateurs.
    43. 43. Google Web Toolkit pour faire court Ecrivez l’application dans votre environnement de développement Java favori (netbeans, eclipse, intellij,…) Débuggez à l’aide d’un navigateur spécial (hosted mode) Compilez le code Java en JAVASCRIPT+HTML optimisé Déployez un ensemble de pages HTML/Javascript sans plugin, ni modification du serveur applicatif Open Source sous Apache 2.0
    44. 44. Google Web Toolkit : les fonctionnalités <ul><li>Librairies compatibles avec tous les navigateurs : </li></ul><ul><ul><li>Interface utilisateur (DOM, widgets, ...) </li></ul></ul><ul><ul><li>Communication Client/Serveur (XHR, RPC, JSON, ...) </li></ul></ul><ul><ul><li>Infrastructure applicative </li></ul></ul><ul><ul><li>Historique, Tests unitaires, Internationalisation, … </li></ul></ul><ul><ul><li>Services extérieurs </li></ul></ul><ul><ul><li>Gadgets, Gears, Google Maps,… </li></ul></ul><ul><ul><li>Intégration de javascript natif (JSNI) </li></ul></ul>
    45. 45. Comment çà marche ?
    46. 46. Code against Java UI libraries Google Web Toolkit Weekly Report 09/01/2008 - 09/08/200 Google Web Toolkit Weekly Report 09/01/2008 - 09/08/200 Comment çà marche ?
    47. 47. Code against Java UI libraries The compiler translates Java source to highly-optimized JS Comment çà marche ?
    48. 48. Code against Java UI libraries The compiler translates Java source to highly-optimized JS Generates browser-compliant JS + HTML files Comment çà marche ?
    49. 49. A chacun son code optimisé Optimisé pour le développeur Optimisé pour chaque navigateur
    50. 50. Les Avantages GWT : des applications performantes Le code est optimisé pour chaque navigateur Le code évite les fuites mémoires Deferred Binding, le résultat de la compilation est : - un package propre à chaque langue, navigateur - un script qui détecte le package à utiliser  vous ne téléchargez que la partie utile
    51. 51. Deferred Binding en image
    52. 52. Les Avantages GWT : support de l’historique du navigateur tabPanel.add( new HTML( &quot;<h1>Page 1 Content</h1>&quot; ), &quot; Page 1 &quot; ); tabPanel.add( new HTML( &quot;<h1>Page 2 Content</h1>&quot; ), &quot; Page 2 &quot; ); tabPanel.addTabListener( new TabListener() { @Override public void onTabSelected(SourcesTabEvents sender, int tabIndex) { // Push an item onto the history stack History. newItem ( &quot;page&quot; + tabIndex); } History.addHistoryListener( new HistoryListener() { public void onHistoryChanged(String historyToken) { if (tokenIsValid(historyToken)) { tabPanel.selectTab(getTabIndex(historyToken)); } } };
    53. 53. Les Avantages GWT : des développements plus rapides <ul><li>Toutes les fonctionnalités des IDE sont disponibles </li></ul><ul><li>(refactoring, templates, debug) </li></ul><ul><li>Google Plugin for Eclipse </li></ul><ul><ul><li>Supporte à la fois GWT et App Engine </li></ul></ul><ul><li>Tests unitaires possibles en utilisant : </li></ul><ul><ul><li>Standard JUnit TestCase </li></ul></ul><ul><ul><li>GWTTestCase </li></ul></ul><ul><ul><li>HTMLUnit tests </li></ul></ul><ul><ul><li>Selenium tests </li></ul></ul><ul><ul><li>Debugger en Java </li></ul></ul>
    54. 54. Pour résumer <ul><li>Google Web Toolkit est la solution idéale, car : </li></ul><ul><li>Les applications Ajax produites sont très optimisées </li></ul><ul><li>Le développeur n’a plus à se soucier de : </li></ul><ul><ul><li>Browser quirk headaches </li></ul></ul><ul><ul><li>Memory leaks </li></ul></ul><ul><ul><li>History support </li></ul></ul><ul><li>Code réutilisable </li></ul><ul><li>Développements plus rapide (outils standards) </li></ul><ul><li>Débug en java </li></ul>
    55. 55. Les librairies existantes <ul><ul><li>GWT  ( http://code.google.com/webtoolkit/ ) </li></ul></ul><ul><ul><li>Incubator  ( http://code.google.com/p/google-web-toolkit-incubator/ ) </li></ul></ul><ul><ul><li>Smart GWT  ( http://code.google.com/p/smartgwt/ ) </li></ul></ul><ul><ul><li>GWT-Ext ( http://code.google.com/p/gwt-ext/ ) </li></ul></ul><ul><ul><li>IT Mill Toolkit  ( http://www.itmill.com/ ) </li></ul></ul><ul><ul><li>GWT mosaic  ( http://code.google.com/p/gwt-mosaic/ ) </li></ul></ul><ul><ul><li>Ext GWT  ( http://extjs.com/products/gxt/ ) </li></ul></ul><ul><ul><li>Advanced GWT Components </li></ul></ul><ul><li>( http://advanced-gwt.sourceforge.net/ )  </li></ul>
    56. 56. GWT 2.0 : chargement progressif Size of Initial JavaScript Download (KB) 375 750 1125 1500 0 7x Decrease In Initial Download Size with runAsync() 1400 KB 200 KB 1125
    57. 57. Developer-guided code splitting with runAsync public void onMySettingsLinkClicked() { GWT.runAsync( new RunAsyncCallback() { public void onSuccess() { new MySettingsDialog().show(); } public void onFailure(Throwable ohNo) { // indicate that something went wrong, // usually a connectivity or server problem } Split point Runs after a short (but improbable) delay Runs if required script cannot be downloaded
    58. 58. GWT 2.0: ImageBundle Pour afficher 11 images, on ne va pas charger 11 fichiers différents, mais un seul
    59. 59. Qui utilise GWT ?
    60. 60. Google Wave
    61. 61. Google Health
    62. 62. Mobile
    63. 63. Lombardi Blueprint Google Web Toolkit
    64. 64. ContactOffice Google Web Toolkit
    65. 65. Faites un tour dans la galerie GWT ! Google Web Toolkit http://gwtgallery.appspot.com/

    ×