Your SlideShare is downloading. ×
  • Like
Node.js, le pavé dans la mare
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Node.js, le pavé dans la mare

  • 1,310 views
Published

Au coeur des applications Web riches, de HTML5 ou des applications Web mobiles, JavaScript est désormais incontournable. Sa communauté très dynamique a contribué à créer un écosystème complet pour …

Au coeur des applications Web riches, de HTML5 ou des applications Web mobiles, JavaScript est désormais incontournable. Sa communauté très dynamique a contribué à créer un écosystème complet pour répondre aux problématiques courantes de test, qualité du code ou intégration continue comme l'a fait avant elle la communauté Java il y a pas loin de dix ans... Parmi les projets les plus observés du moment, c'est curieusement côté serveur que JavaScript fait le plus parler de lui avec Node.js, un environnement de développement Web qui cultive sa différence.

Téléchargement du Coding Kata :

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,310
On SlideShare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
24
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. DekNODNode.js, le pavé dans la marev1.0.0
  • 2. 2Un exemple, vite !http://tweetping.net/
  • 3. 1. Présentation de Node
  • 4. 4Quest-ce que Node Projet créé en 2009 par Ryan Dahl (Joyent Inc.) Basé sur le langage JavaScript Sur-couche de Chrome V8 Positionné côté serveur Piloté par les événements
  • 5. 5GitHub : Node sur le podium
  • 6. 6Ceux qui lutilisent
  • 7. 7Objectifs de Node Fournir une pile logicielle permettant : Aux développeurs web : JavaScript / navigateur De développer des serveurs Faciliter les fonctionnalités de push Proposer une API dI/O suffisament bas niveau Privilégier les appels non bloquants
  • 8. 8Chrome V8 Moteur JavaScript open source Utilisé dans les navigateurs (Google Chrome) Ou en standalone (Node) Compile le JavaScript en code natif Optimise à la volée : Inlining Cache Garbage collector
  • 9. 9Architecture
  • 10. 10Chaîne de traitement
  • 11. 2. Fonctionnalités
  • 12. 12Gestionnaire de packages NPM NPM : Node Packages Modules Gère les dépendances dune application Node Déclarées dans package.json Dépôt local dans node_modules/ (cf. NODE_PATH) Un peu comme Maven... npm install : télécharge les dépendances npm publish : publie un module dans le dépôt central Scopes : local au projet, ou global
  • 13. 13Modèle asynchrone vs multi-thread
  • 14. 14Modèle asynchrone - impacts dans le code// Synchronefunction loadData(id) {var data = store.find(id);return data;}var result = loadData(3);console.log(result :, result);console.log(continue...);// Asynchronefunction loadData(id, callback) {store.find(id, function(data) {callback(data);});}loadData(3, function(result) {console.log(result :, result);});console.log(continue...);
  • 15. 15Synchrone – moins gentilfunction manageRequest(request) {var product, model, view, content;product = store.find(id);if (product === null) {content = renderer.render(notFound.html);return content;}model = { id:product._id, name:product.name, price:product.price };view = productDetail.html;content = renderer.render(view, model);if (content === null) {return renderer.render(internalError.html);}return content;}response.write(manageRequest(request));
  • 16. 16Asynchrone – moins gentilfunction manageRequest(request, callback) {var product, model, view, content;store.find(id, function (product, err) {if (err) {content = renderer.render(notFound.html, function (content) { callback(content); });return;}model = { id:product._id, name:product.name, price:product.price };view = productDetail.html;content = renderer.render(view, model, function (content, err) {if (err) {renderer.render(internalError.html, function (content) { callback(content); });return;}callback(content);});});}manageRequest(request, function (content) { response.write(content); });
  • 17. 17Because nothing blocks,less-than-expertprogrammers are able todevelop fast systemsnodejs.org/about
  • 18. 3. Modules standards
  • 19. 19Net, Http Net permet dagir au niveau socket En tant que serveur ou client Avec des méthodes de base Et des événements à écouter : connect, data, end, close Http : idem mais au niveau web Sappuie sur Net et linterface générique EventEmitter Supporte SSL
  • 20. 20Os, Process, Child process Os : informations relatives au système dexploitation Type, plateforme, mémoire, cpus, interfaces réseaux Pas lhabitude davoir accès à ces infos ☺ Process : informations du processus Arguments, environnement, propriétaire, entrées sorties standards Child process : gestion de processus Exec, fork, spawn
  • 21. 21Path , File System Path : outils pour travailler sur les chemins de fichiers☹ var monfic = mondir/sousdir/name.ext☺  var monfic = path.join(mondir, sousdir, name.ext) File System : Opérations sur les fichiers :● Lecture répertoire, suppression, écriture, information, liens symboliques APIs synchrones ou asynchrones
  • 22. 22Modules Node fournit quelques variables globales module, process, mais pas window Et un mécanisme pour rendre les choses modulaires Inspiration pythonesque ☺var myModule = require(./lib/mymodule);myModule.foo();module.exports = {foo: function(){return bar;}};/lib/mymodule.js/app.js
  • 23. 4. Modules tiers
  • 24. 24Les incontournables – module async forEach, filter, map, log nombreux helpers pour la gestion asynchronevar async = require(async);async.forEach([a, b, c], function (item, callback) {if (item === b) {callback(new Error(b forbidden));} else {console.log(item);callback();}}, function (err) {if (err) {console.log(Error :, err);} else {console.log(done);}});Résultat :aError : [Error: b forbidden]cRésultat avec forEachSeries :aError : [Error: b forbidden]
  • 25. 25Asynchrone multi steps – à la mainstep1(params, function (result) {step2(result, function () {step3(result, function () {step4(result, function () {fini();});});});});
  • 26. 26Asynchrone multi steps – pattern / module Stepstep1(params, function (result) {var n = 0;var next = function () {n++;if (n === 3) {fini();}};step2(result, next);step3(result, next);step4(result, next);});Step(function () {step1(params, this);},function (result) {step2(result, this.parallel());step3(result, this.parallel());step4(result, this.parallel());},function () {fini();});
  • 27. 27Les incontournables – module commander Pour exposer des commandes Plus pratique quune gestion avec process.argvcommander.version(version).option(-f, --force, force on non-empty directory).option(-r, --refresh, refresh files)....parse(process.argv);appPath = commander.args.shift() || process.cwd();if (commander.force) {force();...}
  • 28. 28Les incontournables – module Express Framework pour application web Node : Minimaliste et flexible Basé sur le middleware connect Définition de routes sophistiquées Injection de moteur de rendu : jade, ejs, consolidatevar express = require(express);var app = express();app.get(/hello.txt, function(req, res){res.send(Hello World);});app.listen(3000);
  • 29. 29Les incontournables – module i18n Module de traduction léger Stockage en json Facilité dintégration avec Expressvar express = require(express), i18n = require(i18n);i18n.configure({locales:[en, fr],register: global});app.locals({__: i18n.__,__n: i18n.__n});app.configure(function() {app.use(i18n.init);...});var welcome = __(Welcome);<body><h1><%= __(Welcome) %></h1></body>
  • 30. 30Les incontournables – module mongoose API mongodb pour Node : Adaptée au côté asynchrone de Node Convient à de nombreuses situations : local, distant, cloudvar mongoose = require(mongoose), db = require(./db);var contactDao = {entityName:contact,schema:mongoose.Schema({firstName:{ type:String }, lastName:{ type:String }, phoneNumber:{ type:String }}),getModel:function () {return db.connection.model(contactDao.entityName, contactDao.schema)}};
  • 31. 31Simple db helpervar mongoose = require(mongoose), db = {connection:null,connect:function () {db.connection = mongoose.connect(mongodb://localhost:27017/db);},close:function () {if (db.connection !== null) {mongoose.disconnect();db.connection = null;return true;}return false;}};db.connect();process.on(exit, function (code) {var result = db.close();console.log(disconnecting db : , result);});
  • 32. 32Les incontournables – module socket.io Pour jouer avec les web sockets Modes dégradés pour les navigateurs Ajax, Adobe Flash Socket, iframe Facilité dintégration avec Expressvar io = require(socket.io).listen(80);io.sockets.on(connection,function (socket) {socket.emit(news, { hello: world });socket.on(my other event,function (data) {console.log(data);});});<script src="/socket.io/socket.io.js"></script><script>var socket = io.connect(http://localhost);socket.on(news, function (data) {console.log(data);socket.emit(my other event, { my: data });});</script>serveur client
  • 33. 5. Développement JavaScript
  • 34. 34IDE et debug La qualité de loffre des IDEs est limitée Langage non typé, trop dynamique Eclipse : top avec Java, bof avec JS Faire sans : On se contente dun éditeur (vi, textmate, ...), parfois amélioré Faire avec : Le choix du moment : WebStorm (Jetbrains) Mode Debug (si vraiment nécessaire ☺) : En ligne de commande (à-la-gdb) Dans WebStorm : plus confortable
  • 35. 35Monter en compétence sur JavaScript Résister aux tentations Se concentrer sur le meilleur Et sur le résultat obtenu JavaScript Koans : Inspiré de Ruby
  • 36. 6. Usine Logicielle
  • 37. 37Les composantes essentielles dune Usine Qualité du code : jslint, jshint Tests unitaires : mocha, qunit, jstd, jasmine, maven Couverture du code : jscoverage, coverjs Minifiers et autres compilateurs : less, coffee script, ... Outil de build : grunt Solutions efficaces pour chaque besoin Pas toujours pour lensemble...
  • 38. 38Déploiement & clouds Déployer une application Node : En standalone Derrière un front Pourquoi pas un front Node... Cloud : Heroku, Nojitsu, AppFog, ...
  • 39. 7. Code KataWeb live chat
  • 40. 8. Exemples et retours dexpérience
  • 41. 41Node en synthèse Node réinvente les roues des frameworks web Un environnement auto-suffisant et très typé Le JavaScript en réponse à tous les besoins
  • 42. 42Node en synthèse (suite) Node impose un modèle non bloquant / mono thread : Adapté aux applications réseaux légères et rapides Solution de choix pour une application web : Dont la compléxité est surtout côté client Un éco-système très prolifique Mais jeune...
  • 43. 9. Questions / Réponses
  • 44. 44Notre offre JavaScript Développement client avec JavaScript et Ajax réf. JASI – 3 jours Développement JavaScript avancé réf. JAJA – 2 jours Développer une application Web Full JavaScript réf. STAX – 4 jours Programmer avec jQuery réf. RESI – 2 jours