TechConf 
Autour de Node.js 
Luc Juggery (@lucjuggery) - 11 décembre 2014
Au programme 
● Les concepts 
● Un écosystème 
● Sails.js - framework de développement web 
2
● Les concepts 
● Un écosystème 
● Sails.js - framework de développement web 
3
Les concepts 
JavaScript 
Server side 
Event loop 
Chrome V8 
Single thread Callback 
Non blocking I/O 
4
Les concepts: Chrome V8 
● Moteur d’exécution de JavaScript présent dans Google Chrome 
● Utilisé pour faire tourner du JavaScript hors navigateur 
● Très performant (phase de compilation) 5
Les concepts: JavaScript coté serveur 
● Node.js ⇒ code JavaScript exécuté par Chrome V8 
● Très utilisé pour des applications réseaux 
o serveur HTTP / TCP / ... 
o WebSocket (ex: messagerie instantanée) 
● D’autres utilisations: scripting, DevOps, ... 
● Ne convient pas à tous les usages 
6
Les concepts: Single thread 
● “Everything runs in parallel except your code” 
● Une application Node.js ne lance qu’un seul thread 
● Ne convient pas pour des traitements concurrents gourmands en CPU 
⇒ risque de blocage du thread 
● Permet au contraire une grande concurrence pour des traitements 
utilisant beaucoup d’I/O 
⇒ comment ? 7
Les concepts: Non blocking I/O 
● La gestion des I/O est effectuée de façon asynchrone 
o disque / réseau / database / … 
o ne bloque pas le thread principal 
● blocking I/O vs Non blocking I/O 
> blocking I/O ⇒ attend la fin du traitement 
> non blocking I/O ⇒ sert le client suivant et attend 
d’être notifié par les clients précédents (callback) 
● Lié aux notions de callback et d’event loop 
8
Les concepts - Callback exemple 1 
événement 
fonction de 
callback 
Server HTTP 
Réception d’une requête ⇒ déclenchement de la fonction de callback 
9
Les concepts - Callback exemple 2 
Fonctions de callback encapsulées 
10
Les concepts - Event loop / Callback 
● Callback: méthode en attente d’événements I/O 
● Event loop: basée sur l’architecture événementielle de JavaScript 
o enregistrement des callbacks au lancement de l’application 
o déclenche les callbacks sur réception d’événements 
1. Event loop lancée à 
l’exécution du code 
2. Enregistrement des 
fonctions de callback 
3. Envoi d’un événement 
lorsqu’un traitement est 
terminé 
4. Déclenchement de la 
fonction de callback 
correspondante 
11
C’est l’heure du Quiz ! 
Question: un serveur web Node.js est plus approprié pour: 
A. des traitements gourmands en CPU 
B. des traitements avec beaucoup d’I/O et peu de CPU 
C. des traitements sans I/O 
D. des calculs scientifiques complexes 
Répondez vite en tweetant sur @TechConfQuiz 
12
● Les concepts 
● Un écosystème 
● Sails.js - framework de développement web 
13
Un écosystème - NPM 
● Gestionnaire de modules de Node.js 
● De nombreux modules très matures 
● Grande communauté 
● Une CLI riche (npmjs.org/doc/) 
o pour gérer les modules 
o pour interagir avec l’application (init / start / stop / test / …) 
14
Un écosystème - package.json 
● Descriptif de l’application 
o conserve les versions des dépendances 
o ‘npm init’ ⇒ création du fichier package.json 
o ‘npm install MODULE --save’ ⇒ compile et trace les dépendances 
npm init npm install request --save 
15
Un écosystème - démo 
● Génération du package.json 
● Installation du module request (client http) 
o modification du package.json 
o génération du folder node_modules 
● Mise en place d’une requête simple 
● Lancement de l’application 
16
Un ecosystème - des modules clés 
● connect - framework pour serveur http ⇔ Ruby Rack 
● express - ajoute des vues dynamic et un DSL pour la description des routes (connect+) 
● request - client http 
● async - maitrise du flux et simplification du callback hell 
● socket.io - websocket 
● mocha - framework de test très complet 
● winston - framework de logging 
● forever / pm2 - supervision de l’application 
● grunt / gulp - lanceur de tache ⇔ Ruby Rake 
● lodash - ensemble d’utilitaires 
● momentjs - facilite l’utilisation des date / time 
17
● Les concepts 
● Un écosystème 
● Sails.js - framework de développement web 
18
Sails.js - positionnement du framework 
● MVC framework for Node.js 
● Inspiré de Ruby On Rails 
● Basé sur Express et Socket.io 
● Vues dynamiques (template EJS) 
● Focus sur les API HTTP REST 
● Compatible SQL / NoSQL 
● Architecture très structurante 
19
Sails.js - API Rest démo 1/2 
> npm install -g sails 
> sails new TechConfSailsApp 
> sails generate api user 
> sails lift 
20
Sails.js - API Rest démo 2/2 
> 
> curl -XPOST http://localhost:1337/user?name=Stephane 
21
Sails.js - Exemple de projet 
Backend: Sails API 
Front-end: Sails EJS + Twitter Bootstrap 
22
Conclusion 
● Un framework mature (même si pas encore en 1.0) 
● Utilisé par des grosses entreprises (eBay, Walmart, …) 
● Beaucoup de modules en version 0.0.y / 0.x.y 
o certains déjà matures 
o peut effrayer les clients 
● Des avis contraires 
o node.js is cancer 
o node.js cures cancer 
● Ne convient pas à tous les besoins 
 A tester sur des uses cases métiers 
23
Merci !

Autour de Node.js - TechConf#3

  • 1.
    TechConf Autour deNode.js Luc Juggery (@lucjuggery) - 11 décembre 2014
  • 2.
    Au programme ●Les concepts ● Un écosystème ● Sails.js - framework de développement web 2
  • 3.
    ● Les concepts ● Un écosystème ● Sails.js - framework de développement web 3
  • 4.
    Les concepts JavaScript Server side Event loop Chrome V8 Single thread Callback Non blocking I/O 4
  • 5.
    Les concepts: ChromeV8 ● Moteur d’exécution de JavaScript présent dans Google Chrome ● Utilisé pour faire tourner du JavaScript hors navigateur ● Très performant (phase de compilation) 5
  • 6.
    Les concepts: JavaScriptcoté serveur ● Node.js ⇒ code JavaScript exécuté par Chrome V8 ● Très utilisé pour des applications réseaux o serveur HTTP / TCP / ... o WebSocket (ex: messagerie instantanée) ● D’autres utilisations: scripting, DevOps, ... ● Ne convient pas à tous les usages 6
  • 7.
    Les concepts: Singlethread ● “Everything runs in parallel except your code” ● Une application Node.js ne lance qu’un seul thread ● Ne convient pas pour des traitements concurrents gourmands en CPU ⇒ risque de blocage du thread ● Permet au contraire une grande concurrence pour des traitements utilisant beaucoup d’I/O ⇒ comment ? 7
  • 8.
    Les concepts: Nonblocking I/O ● La gestion des I/O est effectuée de façon asynchrone o disque / réseau / database / … o ne bloque pas le thread principal ● blocking I/O vs Non blocking I/O > blocking I/O ⇒ attend la fin du traitement > non blocking I/O ⇒ sert le client suivant et attend d’être notifié par les clients précédents (callback) ● Lié aux notions de callback et d’event loop 8
  • 9.
    Les concepts -Callback exemple 1 événement fonction de callback Server HTTP Réception d’une requête ⇒ déclenchement de la fonction de callback 9
  • 10.
    Les concepts -Callback exemple 2 Fonctions de callback encapsulées 10
  • 11.
    Les concepts -Event loop / Callback ● Callback: méthode en attente d’événements I/O ● Event loop: basée sur l’architecture événementielle de JavaScript o enregistrement des callbacks au lancement de l’application o déclenche les callbacks sur réception d’événements 1. Event loop lancée à l’exécution du code 2. Enregistrement des fonctions de callback 3. Envoi d’un événement lorsqu’un traitement est terminé 4. Déclenchement de la fonction de callback correspondante 11
  • 12.
    C’est l’heure duQuiz ! Question: un serveur web Node.js est plus approprié pour: A. des traitements gourmands en CPU B. des traitements avec beaucoup d’I/O et peu de CPU C. des traitements sans I/O D. des calculs scientifiques complexes Répondez vite en tweetant sur @TechConfQuiz 12
  • 13.
    ● Les concepts ● Un écosystème ● Sails.js - framework de développement web 13
  • 14.
    Un écosystème -NPM ● Gestionnaire de modules de Node.js ● De nombreux modules très matures ● Grande communauté ● Une CLI riche (npmjs.org/doc/) o pour gérer les modules o pour interagir avec l’application (init / start / stop / test / …) 14
  • 15.
    Un écosystème -package.json ● Descriptif de l’application o conserve les versions des dépendances o ‘npm init’ ⇒ création du fichier package.json o ‘npm install MODULE --save’ ⇒ compile et trace les dépendances npm init npm install request --save 15
  • 16.
    Un écosystème -démo ● Génération du package.json ● Installation du module request (client http) o modification du package.json o génération du folder node_modules ● Mise en place d’une requête simple ● Lancement de l’application 16
  • 17.
    Un ecosystème -des modules clés ● connect - framework pour serveur http ⇔ Ruby Rack ● express - ajoute des vues dynamic et un DSL pour la description des routes (connect+) ● request - client http ● async - maitrise du flux et simplification du callback hell ● socket.io - websocket ● mocha - framework de test très complet ● winston - framework de logging ● forever / pm2 - supervision de l’application ● grunt / gulp - lanceur de tache ⇔ Ruby Rake ● lodash - ensemble d’utilitaires ● momentjs - facilite l’utilisation des date / time 17
  • 18.
    ● Les concepts ● Un écosystème ● Sails.js - framework de développement web 18
  • 19.
    Sails.js - positionnementdu framework ● MVC framework for Node.js ● Inspiré de Ruby On Rails ● Basé sur Express et Socket.io ● Vues dynamiques (template EJS) ● Focus sur les API HTTP REST ● Compatible SQL / NoSQL ● Architecture très structurante 19
  • 20.
    Sails.js - APIRest démo 1/2 > npm install -g sails > sails new TechConfSailsApp > sails generate api user > sails lift 20
  • 21.
    Sails.js - APIRest démo 2/2 > > curl -XPOST http://localhost:1337/user?name=Stephane 21
  • 22.
    Sails.js - Exemplede projet Backend: Sails API Front-end: Sails EJS + Twitter Bootstrap 22
  • 23.
    Conclusion ● Unframework mature (même si pas encore en 1.0) ● Utilisé par des grosses entreprises (eBay, Walmart, …) ● Beaucoup de modules en version 0.0.y / 0.x.y o certains déjà matures o peut effrayer les clients ● Des avis contraires o node.js is cancer o node.js cures cancer ● Ne convient pas à tous les besoins  A tester sur des uses cases métiers 23
  • 24.