2 Javascript dans tous ses états Bruno MichelYann Schwartz AF83Polom
3 Au menu Contexte Javascript serveur & asynchrone : node Javascript réactif : Reactive Extensions Javascript, the good parts : coffeescript
4 Contexte
5 Interlude Javascript côté serveur
6 Javascript serveur & asynchrone : node
7 node.js Un environnement JavaScript Côté serveur Avec un modèle asynchrone Efficace pour les I/O Plus simple que le C ;-)
8 Démo Hello World, version web
9 Démo Un serveur de discussion en ligne
10 Le modèle asynchrone Le principe : déléguer à node.js Dès que l'on risque d'attendre on demande à node.js : Fais ceci dès que tu peux et quand c'est fait, reviens me voir Une fonction de callback Avec error en premier paramètre Un UNIQUE thread dexécution (mais toutes les actions dI/O sont asynchrones)
11 Les avantages Node.js très efficace pour la concurrence Gère les I/O pour vous Quasiment aussi rapide qu'un serveur HTTP Beaucoup de connexions en parallèle Mais reste simple à écrire Sans les problèmes classiques des threads (synchronisation, ressources, etc.)
12 L'écosystème Un écosystème qui grandit rapidement Quelques modules à connaître NPM – Node Package Manager Vows – Tester votre code Express – Un framework web léger Fugue – Serveur avec plusieurs instances
13 Javascript réactif : Reactive Extensions
14 Reactive Extensions for Js Si on parlait de LINQ ?
15 LINQ ? Une approche déclarative Evaluation paresseuse On enchaîne les opérateurs pour travailler sur un flux de données On compose ses traitements
16 LINQ en une phrase Un pattern de manipulation de données, composable, et basé sur le pull.
17 Revenons à nos moutons La programmation Javascript fait grand usage : Des événements De lasynchrone Gérer asynchrone et événements devient vite complexe On pense encore synchrone et impératif Gestion des erreurs Synchronisation et combinaisons Et si on avait un « LINQ to events » ? Mais en Javascript
18 Reactive Extensions LINQ : IEnumerable Rx : Observable et Observer LINQ et Rx : évaluation paresseuse « just in time » LINQ et Rx : on compose des opérateurs
19 Observable et Observer Un Observable Une source à laquelle on sabonne Un Observable nest pas un événement Abstraction facilement manipulable et composable Plus facile à tester Un Observer sabonne à lObservable Consomme Précise ce qui se passe en cas derreur ou de fin
20 Les observables permettent de manipuler une chronologie dévénements comme une séquence On applique des opérateurs à cette chronologie Et on exprime ainsi un workflow
21 Quelques opérateurs « Classiques » Where, Select, Skip, TakeWhile, Zip, Range Agrégations Min, Max, Sum, Aggregate, Scan, GroupBy Structures de contrôle If, Then, While Spécifiques Rx BufferWith* Amb Join ForkJoin From*Event, ToAsync, XmlHttpRequest
22 Exemple
23 Démo Rx Javascript
24 Javascript, the good parts : coffeescript
25 Coffeescript
26 Javascript Ce qui est beau First class functions Closures Prototypes et dynamisme Objets littéraux
27 The ugly parts Les variables globales La portée Les points virgule en folie Les comparaisons hasOwnProperty… le mot clé with… Les bonnes et moins bonnes manières de créer des objets Le bruit syntaxique des { ( et ;
28 Coffeescript Et si on gardait les bons côtés… … en oubliant les autres ? Fonctions plus simples à écrire Plus daccolades La bonne portée par défaut Pas de mauvaises surprises sur la comparaison Création simplifiée des classes Quelques bonus
29 Compilation Coffeescript se compile en Javascript standard et propre (performances comparables) Compilation en ligne de commande ou à la volée Compatible avec toutes les bibliothèques Javascript existantes (jquery, Rx, node ….)
30 Ressources Reactive Extensions Home : msdn.microsoft.com/data/gg Série sur RxJs : weblogs.asp.net/podwysocki/ Node Home : github.com/ry/node Binaires windows : node-js.prcn.co.cc Coffeescript Home : jashkenas.github.com/coffee-script/ Wrapper.NET : github.com/abolibibelot/coffeescript-dotnet Démos github.com/abolibibelot/Techdays2011_Javascript
31 MSDN et TechNet : lessentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs