2014.12.11 - tech conf #3 - présentation node.js
TRANSCRIPT
![Page 1: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/1.jpg)
TechConfAutour de Node.js
Luc Juggery (@lucjuggery) - 11 décembre 2014
![Page 2: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/2.jpg)
Au programme
● Les concepts
● Un écosystème
● Sails.js - framework de développement web
2
![Page 3: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/3.jpg)
● Les concepts
● Un écosystème
● Sails.js - framework de développement web
3
![Page 4: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/4.jpg)
Les concepts
JavaScript
Server sideEvent loop
Non blocking I/O
Chrome V8
Single thread Callback
4
![Page 5: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/5.jpg)
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
![Page 6: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/6.jpg)
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
![Page 7: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/7.jpg)
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
![Page 8: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/8.jpg)
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 loop8
![Page 9: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/9.jpg)
Les concepts - Callback exemple 1
Réception d’une requête ⇒ déclenchement de la fonction de callback
événement
fonction de
callback
Server HTTP
9
![Page 10: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/10.jpg)
Fonctions de callback encapsulées
Les concepts - Callback exemple 2
10
![Page 11: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/11.jpg)
● 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
3. Envoi d’un événement
lorsqu’un traitement est
terminé
2. Enregistrement des
fonctions de callback
Les concepts - Event loop / Callback
4. Déclenchement de la
fonction de callback
correspondante
11
![Page 12: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/12.jpg)
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
![Page 13: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/13.jpg)
● Les concepts
● Un écosystème
● Sails.js - framework de développement web
13
![Page 14: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/14.jpg)
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
![Page 15: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/15.jpg)
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 install request --savenpm init
15
![Page 16: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/16.jpg)
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
![Page 17: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/17.jpg)
● 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
Un ecosystème - des modules clés
17
![Page 18: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/18.jpg)
● Les concepts
● Un écosystème
● Sails.js - framework de développement web
18
![Page 19: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/19.jpg)
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
![Page 20: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/20.jpg)
> npm install -g sails
> sails new TechConfSailsApp
> sails generate api user
> sails lift
Sails.js - API Rest démo 1/2
20
![Page 21: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/21.jpg)
>
> curl -XPOST http://localhost:1337/user?name=Stephane
Sails.js - API Rest démo 2/2
21
![Page 22: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/22.jpg)
Sails.js - Exemple de projet
Backend: Sails API
Front-end: Sails EJS + Twitter Bootstrap22
![Page 23: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/23.jpg)
● 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
Conclusion
23
![Page 24: 2014.12.11 - TECH CONF #3 - Présentation Node.js](https://reader033.vdocuments.us/reader033/viewer/2022060205/55a1a9ff1a28abed1e8b4734/html5/thumbnails/24.jpg)
Merci !