Javascript dans tous ses tats Bruno Michel Yann
Javascript dans tous ses états Bruno Michel Yann Schwartz AF 83 @brmichel Polom @abolibibelot 2
Au menu • Contexte • Javascript serveur & asynchrone : node • Javascript réactif : Reactive Extensions • Javascript, the good parts : coffeescript 3
Contexte 4
Interlude Javascript côté serveur 5
Javascript serveur & asynchrone : node 6
node. js Un environnement Java. Script Côté serveur Avec un modèle asynchrone Efficace pour les I/O Plus simple que le C ; -) 7
Démo Hello World, version web 8
Démo Un serveur de discussion en ligne 9
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) 10
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. ) 11
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 12
Javascript réactif : Reactive Extensions 13
Reactive Extensions for Js Si on parlait de LINQ ? 14
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 15
LINQ en une phrase • Un pattern de manipulation de données, composable, et basé sur le pull. 16
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 17
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 18
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 19
• 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 20
Quelques opérateurs • « Classiques » • Where, Select, Skip, Take. While, Zip, Range Agrégations Min, Max, Sum, Aggregate, Scan, Group. By • Structures de contrôle If, Then, While • Spécifiques Rx Buffer. With* Amb Join Fork. Join From*Event, To. Async, Xml. Http. Request 21
Exemple 22
Démo Rx Javascript 23
Javascript, the good parts : coffeescript 24
Coffeescript 25
Javascript • Ce qui est beau • • First class functions Closures Prototypes et dynamisme Objets littéraux 26
The ugly parts • Les variables globales • La portée • Les points virgule en folie • Les comparaisons • has. Own. Property… • le mot clé with… • Les bonnes et moins bonnes manières de créer des objets • Le bruit syntaxique des { ( et ; 27
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 28
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 …. ) 29
Ressources Reactive Extensions Home : msdn. microsoft. com/data/gg 577609 Série sur Rx. Js : 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/Techdays 2011_Javascript 30
MSDN et Tech. Net : 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 31
- Slides: 31