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: 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
6. 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
7. 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
8. 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
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 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
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 - 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
20. Sails.js - API Rest démo 1/2
> npm install -g sails
> sails new TechConfSailsApp
> sails generate api user
> sails lift
20
22. Sails.js - Exemple de projet
Backend: Sails API
Front-end: Sails EJS + Twitter Bootstrap
22
23. 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