Javascript dans tous ses ét ats

31

description

Javascript dans tous ses ét ats. Bruno MichelYann Schwartz AF83 Polom @ brmichel @ abolibibelot. Au menu. Contexte Javascript serveur & asynchrone : node Javascript réactif : Reactive Extensions Javascript , the good parts : coffeescript. Contexte. Interlude. - PowerPoint PPT Presentation

Transcript of Javascript dans tous ses ét ats

Page 1: Javascript dans tous ses ét ats
Page 2: Javascript dans tous ses ét ats

2

Javascript dans tous ses états

Bruno Michel Yann SchwartzAF83 Polom@brmichel @abolibibelot

Page 3: Javascript dans tous ses ét ats

3

Au menu• Contexte

• Javascript serveur & asynchrone : node

• Javascript réactif : Reactive Extensions

• Javascript, the good parts : coffeescript

Page 4: Javascript dans tous ses ét ats

4

Contexte

Page 5: Javascript dans tous ses ét ats

5

Interlude

Javascript côté serveur

Page 6: Javascript dans tous ses ét ats

6

Javascript serveur & asynchrone : node

Page 7: Javascript dans tous ses ét ats

7

node.jsUn environnement JavaScriptCôté serveurAvec un modèle asynchroneEfficace pour les I/OPlus simple que le C ;-)

Page 8: Javascript dans tous ses ét ats

8

DémoHello World, version web

Page 9: Javascript dans tous ses ét ats

9

DémoUn serveur de discussion en ligne

Page 10: Javascript dans tous ses ét ats

10

Le modèle asynchroneLe principe : déléguer à node.js

Dès que l'on risque d'attendre on demande à node.js :

Fais ceci dès que tu peuxet quand c'est fait, reviens me voir

Une fonction de callbackAvec error en premier paramètre

• Un UNIQUE thread d’exécution (mais toutes les actions d’I/O sont asynchrones)

Page 11: Javascript dans tous ses ét ats

11

Les avantages• Node.js très efficace pour la concurrence

Gère les I/O pour vousQuasiment aussi rapide qu'un serveur HTTPBeaucoup de connexions en parallèle

• Mais reste simple à écrireSans les problèmes classiques des threads(synchronisation, ressources, etc.)

Page 12: Javascript dans tous ses ét ats

12

L'écosystèmeUn écosystème qui grandit rapidement

https://github.com/ry/node/wiki/

Quelques modules à connaîtreNPM – Node Package ManagerVows – Tester votre codeExpress – Un framework web légerFugue – Serveur avec plusieurs instances

Page 13: Javascript dans tous ses ét ats

13

Javascript réactif : Reactive Extensions

Page 14: Javascript dans tous ses ét ats

14

Reactive Extensions for JsSi on parlait de LINQ ?

Page 15: Javascript dans tous ses ét ats

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

Page 16: Javascript dans tous ses ét ats

16

LINQ en une phrase

• Un pattern de manipulation de données, composable, et basé sur le pull.

Page 17: Javascript dans tous ses ét ats

17

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

Page 18: Javascript dans tous ses ét ats

18

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

Page 19: Javascript dans tous ses ét ats

19

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

Page 20: Javascript dans tous ses ét ats

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

Page 21: Javascript dans tous ses ét ats

21

Quelques opérateurs• « Classiques »

Where, Select, Skip, TakeWhile, Zip, Range• Agrégations

Min, Max, Sum, Aggregate, Scan, GroupBy

• Structures de contrôleIf, Then, While

• Spécifiques RxBufferWith* Amb Join ForkJoin

From*Event, ToAsync, XmlHttpRequest

Page 22: Javascript dans tous ses ét ats

22

Exemple

Page 23: Javascript dans tous ses ét ats

23

DémoRx Javascript

Page 24: Javascript dans tous ses ét ats

24

Javascript, the good parts : coffeescript

Page 25: Javascript dans tous ses ét ats

25

Coffeescript

Page 26: Javascript dans tous ses ét ats

26

Javascript• Ce qui est beau

• First class functions• Closures• Prototypes et dynamisme• Objets littéraux

Page 27: Javascript dans tous ses ét ats

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 ;

Page 28: Javascript dans tous ses ét ats

28

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

Page 29: Javascript dans tous ses ét ats

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 ….)

Page 30: Javascript dans tous ses ét ats

30

RessourcesReactive ExtensionsHome : msdn.microsoft.com/data/gg577609Série sur RxJs : weblogs.asp.net/podwysocki/

NodeHome : github.com/ry/nodeBinaires windows : node-js.prcn.co.cc

CoffeescriptHome : jashkenas.github.com/coffee-script/Wrapper .NET : github.com/abolibibelot/coffeescript-dotnet

Démosgithub.com/abolibibelot/Techdays2011_Javascript

Page 31: Javascript dans tous ses ét ats

31

MSDN et TechNet : l’essentiel des ressources techniques à portée de clic

http://technet.com http://msdn.com

Portail administration et infrastructure pour informaticiens

Portail de ressources technique pour développeurs