Autour de Node.js - TechConf#3
Transcript of Autour de Node.js - TechConf#3
TechConfAutour 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 sideEvent loop
Non blocking I/O
Chrome V8
Single thread Callback
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 loop8
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
Fonctions de callback encapsulées
Les concepts - Callback exemple 2
10
● 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
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 install request --savenpm init
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
● 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
● 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
> npm install -g sails
> sails new TechConfSailsApp
> sails generate api user
> sails lift
Sails.js - API Rest démo 1/2
20
>
> curl -XPOST http://localhost:1337/user?name=Stephane
Sails.js - API Rest démo 2/2
21
Sails.js - Exemple de projet
Backend: Sails API
Front-end: Sails EJS + Twitter Bootstrap22
● 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
Merci !