310 likes | 457 Views
Javascript dans tous ses ét ats. Bruno Michel Yann Schwartz AF83 Polom @ brmichel @ abolibibelot. Au menu. Contexte Javascript serveur & asynchrone : node Javascript réactif : Reactive Extensions Javascript , the good parts : coffeescript. Contexte. Interlude.
E N D
Javascriptdans tous ses états Bruno Michel Yann SchwartzAF83 Polom @brmichel @abolibibelot
Au menu • Contexte • Javascript serveur & asynchrone : node • Javascript réactif : Reactive Extensions • Javascript, the good parts : coffeescript
Interlude Javascriptcôté serveur
node.js • Un environnement JavaScript • Côté serveur • Avec un modèle asynchrone • Efficace pour les I/O • Plus simple que le C ;-)
Démo Hello World, version web
Démo Un serveur de discussion en ligne
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 d’exécution (mais toutes les actions d’I/O sont asynchrones)
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.)
L'écosystème • Un écosystème qui grandit rapidement • https://github.com/ry/node/wiki/ • Quelques modules à connaître • NPM – Node Package Manager • Vows – Tester votre code • Express – Un framework web léger • Fugue – Serveur avec plusieurs instances
Reactive Extensions for Js Si on parlait de LINQ ?
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
LINQ en une phrase • Un pattern de manipulation de données, composable, et basé sur le pull.
Revenons à nos moutons • La programmation Javascript fait grand usage : • Des événements • De l’asynchrone • 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
Reactive Extensions • LINQ : IEnumerable<T> • Rx : Observable et Observer • LINQ et Rx : évaluation paresseuse « just in time » • LINQ et Rx : on compose des opérateurs
Observable et Observer • Un Observable Une source à laquelle on s’abonne • Un Observable n’est pas un événement • Abstraction facilement manipulable et composable • Plus facile à tester • Un Observer s’abonne à l’Observable • Consomme • Précise ce qui se passe en cas d’erreur ou de fin
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
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* AmbJoinForkJoinFrom*Event, ToAsync, XmlHttpRequest
Démo RxJavascript
Javascript • Ce qui est beau • First class functions • Closures • Prototypes et dynamisme • Objets littéraux
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 ;
Coffeescript • Et si on gardait les bons côtés… … en oubliant les autres ? • Fonctions plus simples à écrire • Plus d’accolades • La bonne portée par défaut • Pas de mauvaises surprises sur la comparaison • Création simplifiée des classes • Quelques bonus
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 ….)
Ressources Reactive Extensions Home: msdn.microsoft.com/data/gg577609 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
MSDN et TechNet: l’essentiel des ressources techniques à portée de clic • Portail administration et infrastructure pour informaticiens • Portail de ressources technique pour développeurs http://technet.com http://msdn.com