NodeJS & Express Desarrollo Web 2.0 Eficaz                  Betabeers Barcelona 23/03/2012
Quienes somos?Christophe Eymardemail : christophe@ravelsoft.comFélix Delvaltwitter : @fe_lix_email : felix@ravelsoft.com  ...
NodeJS
Qué es NodeJS● LibUV : Una biblioteca desarrollada por  Joyent en C
Qué es NodeJS● LibUV : Una biblioteca desarrollada por  Joyent en C● V8 : El motor Javascript de Google Chrome
Qué es NodeJS● LibUV : Una biblioteca desarrollada por  Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en...
Qué es NodeJS● LibUV : Una biblioteca desarrollada por  Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en...
Qué es NodeJS● LibUV : Una biblioteca desarrollada por  Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en...
Porque NodeJS● Un Sólo Hilo  ○ ¡ (casi) adios mutex y race-condition !
Porque NodeJS● Un Sólo Hilo  ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) :   ○ Uso óptimo del CPU
Porque NodeJS● Un Sólo Hilo  ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) :   ○ Uso óptimo del CPU ...
Synchronous vs. Asynchronous
Porque NodeJS● Un Sólo Hilo  ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) :   ○ Uso óptimo del CPU ...
Porque NodeJS● Un Sólo Hilo  ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) :   ○ Uso óptimo del CPU ...
V8 en el mundo Real (más o menos)                         fuente: http://shootout.alioth.debian.org
Desarrollar en NodeJS● Programación por callbacks
Desarrollar en NodeJS● Programación por callbacks  ○ Parecido a request AJAX
Desarrollar en NodeJS● Programación por callbacks  ○ Parecido a request AJAX  ○ « Hilos cooperativos »
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »●   El event-loop
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »●   El event-loo...
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »●   El event-loo...
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »● El event-loop ...
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »● El event-loop ...
Desarrollar en NodeJS● Programación por callbacks    ○ Parecido a request AJAX    ○ « Hilos cooperativos »● El event-loop ...
Hello World   var http = require(http);   function miRespuesta(req, res) {     res.writeHead(200, {Content-Type:   text/pl...
Mal Ejemplo : Fibonacci
Mal Ejemplo : Fibonacci      var http = require(http);      function fibonacci(n) {          if (n <= 1) return n;        ...
Mal Ejemplo II, pero mejorvar http = require("http")                                               http.createServer(funct...
Express
Express y su comunidad+ de 5500 watchers+ de 540 forks+ de 100 issues abiertas                           source : github.com
¿ Que propone ?● Router de URL  Con get, post,...
¿ Que propone ?● Router de URL  Con get, post,...● Facilidades para motores de plantillas:  Jade, EJS, JinJS, ...
¿ Que propone ?● Router de URL  Con get, post,...● Facilidades para motores de plantillas:  Jade, EJS, JinJS, ...● Middlew...
¿ Que propone ?● Router de URL  Con get, post,...● Facilidades para motores de plantillas:  Jade, EJS, JinJS, ...● Middlew...
Base del routingapp.get(/post/:post, myfun);app.get(/post/([^/]+)/?, my fun);matched :  /post/123  /post/foobar  /post/foo...
Plantillas con Jade!!! 5html  head    title Blog    link(rel=stylesheet, href=/stylesheets/style.css)  body    #container ...
Instalación# npm install -g express
Hello, World!var app = express.createServer();app.get(/, function(req, res){    res.send(Hello World);});app.listen(3000);
Hello, World!var express = require(express);var app = express.createServer();app.get(/, function(req, res){    res.send(He...
El test más inútil del mundo$ ab -n 10000 -c 1000 http://localhost:3000Concurrency Level:      1000Time taken for tests:  ...
Creación deun blog básico    con Express
Bootstrapping el proyecto$ express misuperblog$ cd misuperblog$ npm install
Estructura de la applicaciónmisuperblog|-- package.json /* Contiene las dependencias, autores */|-- app.js          /* Arc...
El datastorevar Post = require (./models/post);p = new Post();{ id: 1,  title: undefined,  body: undefined,  createdAt: Fr...
En conclusión !Node.js :● V8         → Velocidad● Libuv      → Asíncrono● Javascript → Languaje únicoExpress :● Routing po...
Buenas referenciashttp://nodejs.org/http://visionmedia.github.com/masteringnode/http://expressjs.com/http://nodeup.com/htt...
¿ Algunas preguntas?
Alternativas a los Callbacks● StreamlineJS● node-fibers● async/step
Bonus : el mal ejemplo conStreamlineif (!require(streamline/module)(module))return;                                       ...
Creación de aplicaciones web con Node.js y Express
Upcoming SlideShare
Loading in …5
×

Creación de aplicaciones web con Node.js y Express

1,954
-1

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,954
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Creación de aplicaciones web con Node.js y Express

  1. 1. NodeJS & Express Desarrollo Web 2.0 Eficaz Betabeers Barcelona 23/03/2012
  2. 2. Quienes somos?Christophe Eymardemail : christophe@ravelsoft.comFélix Delvaltwitter : @fe_lix_email : felix@ravelsoft.com https://github.com/ravelsoft
  3. 3. NodeJS
  4. 4. Qué es NodeJS● LibUV : Una biblioteca desarrollada por Joyent en C
  5. 5. Qué es NodeJS● LibUV : Una biblioteca desarrollada por Joyent en C● V8 : El motor Javascript de Google Chrome
  6. 6. Qué es NodeJS● LibUV : Una biblioteca desarrollada por Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en Javascript
  7. 7. Qué es NodeJS● LibUV : Una biblioteca desarrollada por Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en Javascript● Multi-Plataforma : Windows, Linux, OS X
  8. 8. Qué es NodeJS● LibUV : Una biblioteca desarrollada por Joyent en C● V8 : El motor Javascript de Google Chrome● Runtime en Javascript● Multi-Plataforma : Windows, Linux, OS X● NPM : Package Manager (www.npmjs.org)
  9. 9. Porque NodeJS● Un Sólo Hilo ○ ¡ (casi) adios mutex y race-condition !
  10. 10. Porque NodeJS● Un Sólo Hilo ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) : ○ Uso óptimo del CPU
  11. 11. Porque NodeJS● Un Sólo Hilo ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) : ○ Uso óptimo del CPU ○ « scaling » más evidente : más procesos y un load- balancer
  12. 12. Synchronous vs. Asynchronous
  13. 13. Porque NodeJS● Un Sólo Hilo ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) : ○ Uso óptimo del CPU ○ « scaling » más evidente : más procesos y un load- balancer● Compartir código entre cliente e servidor
  14. 14. Porque NodeJS● Un Sólo Hilo ○ ¡ (casi) adios mutex y race-condition !● Asíncrono (Non Blocking) : ○ Uso óptimo del CPU ○ « scaling » más evidente : más procesos y un load- balancer● Compartir código entre cliente e servidor● V8
  15. 15. V8 en el mundo Real (más o menos) fuente: http://shootout.alioth.debian.org
  16. 16. Desarrollar en NodeJS● Programación por callbacks
  17. 17. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX
  18. 18. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »
  19. 19. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop
  20. 20. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop ○ epoll / kpoll / etc.
  21. 21. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop ○ epoll / kpoll / etc. ○ Llama las callbacks cuando tienen su resultado
  22. 22. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop ○ epoll / kpoll / etc. ○ Llama las callbacks cuando tienen su resultado● ... hay que respetarle
  23. 23. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop ○ epoll / kpoll / etc. ○ Llama las callbacks cuando tienen su resultado● ... hay que respetarle ○ Cuidado con el uso del CPU
  24. 24. Desarrollar en NodeJS● Programación por callbacks ○ Parecido a request AJAX ○ « Hilos cooperativos »● El event-loop ○ epoll / kpoll / etc. ○ Llama las callbacks cuando tienen su resultado● ... hay que respetarle ○ Cuidado con el uso del CPU ○ process.nextTick
  25. 25. Hello World var http = require(http); function miRespuesta(req, res) { res.writeHead(200, {Content-Type: text/plain}); res.end(Hello Worldn); } var server = http.createServer(miRespuesta) server.listen(1337, 127.0.0.1);
  26. 26. Mal Ejemplo : Fibonacci
  27. 27. Mal Ejemplo : Fibonacci var http = require(http); function fibonacci(n) { if (n <= 1) return n; else return fibonacci(n - 1) + fibonacci(n - 2); } http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); if (req.url == "/fibo") res.end("Fibo : " + fibonacci(33)); // OUCH else res.end(Hello Worldn); }).listen(1337, 127.0.0.1);
  28. 28. Mal Ejemplo II, pero mejorvar http = require("http") http.createServer(function (req, res) {function fibonacci(n, cbk) { res.writeHead(200, {Content-Type: if (n <= 1) cbk(n); text/plain}); else fibonacci(n - 1, function(_n_1) { if (req.url == "/fibo") { process.nextTick(function() { fibonacci(33, function(fibres) { fibonacci(n - 2, function( _n_2) { res.end(Fibo: + fibres + n); cbk(_n_1 + _n_2) }) }) } else { }) res.end(Hello Worldn); }) }} }).listen(1337, 127.0.0.1);
  29. 29. Express
  30. 30. Express y su comunidad+ de 5500 watchers+ de 540 forks+ de 100 issues abiertas source : github.com
  31. 31. ¿ Que propone ?● Router de URL Con get, post,...
  32. 32. ¿ Que propone ?● Router de URL Con get, post,...● Facilidades para motores de plantillas: Jade, EJS, JinJS, ...
  33. 33. ¿ Que propone ?● Router de URL Con get, post,...● Facilidades para motores de plantillas: Jade, EJS, JinJS, ...● Middleware via Connect y en cada función de routing
  34. 34. ¿ Que propone ?● Router de URL Con get, post,...● Facilidades para motores de plantillas: Jade, EJS, JinJS, ...● Middleware via Connect y en cada función de routing● focus en alta rendimiento● muy buen test coverage
  35. 35. Base del routingapp.get(/post/:post, myfun);app.get(/post/([^/]+)/?, my fun);matched : /post/123 /post/foobar /post/foobarnot matched : /post/foo/bar
  36. 36. Plantillas con Jade!!! 5html head title Blog link(rel=stylesheet, href=/stylesheets/style.css) body #container block content
  37. 37. Instalación# npm install -g express
  38. 38. Hello, World!var app = express.createServer();app.get(/, function(req, res){ res.send(Hello World);});app.listen(3000);
  39. 39. Hello, World!var express = require(express);var app = express.createServer();app.get(/, function(req, res){ res.send(Hello World);});app.listen(3000);
  40. 40. El test más inútil del mundo$ ab -n 10000 -c 1000 http://localhost:3000Concurrency Level: 1000Time taken for tests: 19.458 secondsComplete requests: 100000Requests per second: 5139.34 [#/sec] (mean)Time per request: 194.578 [ms] (mean)Time per request: 0.195 [ms] (mean, across allconcurrent requests) Intel i3 540 @ 3.07GHz / 8 GB RAM
  41. 41. Creación deun blog básico con Express
  42. 42. Bootstrapping el proyecto$ express misuperblog$ cd misuperblog$ npm install
  43. 43. Estructura de la applicaciónmisuperblog|-- package.json /* Contiene las dependencias, autores */|-- app.js /* Archivo principal de la applicación */|-- public /* Archivos estaticos */| |-- images| |-- stylesheets| | `-- style.css| `-- javascripts|-- views /* Contiene todo los templates */| |-- index.jade| `-- layout.jade`-- routes /* Routing y codigo de cada view */ `-- index.js
  44. 44. El datastorevar Post = require (./models/post);p = new Post();{ id: 1, title: undefined, body: undefined, createdAt: Fri, 23 Mar 2012 14:23:30 GMT }p.save(); Post.all(); Post.get();
  45. 45. En conclusión !Node.js :● V8 → Velocidad● Libuv → Asíncrono● Javascript → Languaje únicoExpress :● Routing potente● Plantillas modulares● Middleware
  46. 46. Buenas referenciashttp://nodejs.org/http://visionmedia.github.com/masteringnode/http://expressjs.com/http://nodeup.com/http://nodejs.org/Los gurushttps://github.com/substackhttps://github.com/isaacshttps://github.com/visionmediahttps://github.com/felixge
  47. 47. ¿ Algunas preguntas?
  48. 48. Alternativas a los Callbacks● StreamlineJS● node-fibers● async/step
  49. 49. Bonus : el mal ejemplo conStreamlineif (!require(streamline/module)(module))return; http.createServer(function (req, res, _) {var http = require("http") res.writeHead(200, {Content-Type: text/plain});function fibonacci(n, _) { if (req.url == "/fibo") if (n <= 1) return n; res.end(Fibo: + fibonacci(33, _) + var res = fibonacci(n - 1, _); n); process.nextTick(_); else return res + fibonacci(n - 2, _); res.end(Hello Worldn);} }).listen(1337, 127.0.0.1);
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×