Este documento presenta Node.js y Express como herramientas para el desarrollo web eficiente. Explica qué es Node.js, incluyendo sus componentes clave como LibUV, V8 y su enfoque en programación asíncrona. También describe las ventajas de Express como un marco de trabajo para Node.js que facilita el enrutamiento, plantillas y middleware. Finalmente, proporciona ejemplos básicos de código para ilustrar el uso de estas tecnologías.
4. Qué es NodeJS
● LibUV : Una biblioteca desarrollada por
Joyent en C
5. Qué es NodeJS
● LibUV : Una biblioteca desarrollada por
Joyent en C
● V8 : El motor Javascript de Google Chrome
6. Qué es NodeJS
● LibUV : Una biblioteca desarrollada por
Joyent en C
● V8 : El motor Javascript de Google Chrome
● Runtime en Javascript
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. 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)
10. Porque NodeJS
● Un Sólo Hilo
○ ¡ (casi) adios mutex y race-condition !
● Asíncrono (Non Blocking) :
○ Uso óptimo del CPU
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
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. 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. V8 en el mundo Real (más o menos)
fuente: http://shootout.alioth.debian.org
18. Desarrollar en NodeJS
● Programación por callbacks
○ Parecido a request AJAX
○ « Hilos cooperativos »
19. Desarrollar en NodeJS
● Programación por callbacks
○ Parecido a request AJAX
○ « Hilos cooperativos »
● El event-loop
20. Desarrollar en NodeJS
● Programación por callbacks
○ Parecido a request AJAX
○ « Hilos cooperativos »
● El event-loop
○ epoll / kpoll / etc.
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. 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. 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. 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. 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');
33. ¿ Que propone ?
● Router de URL
Con get, post,...
● Facilidades para motores de plantillas:
Jade, EJS, JinJS, ...
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
35. ¿ 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
40. Hello, World!
var express = require('express');
var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
41. El test más inútil del mundo
$ ab -n 10000 -c 1000 http://localhost:3000
Concurrency Level: 1000
Time taken for tests: 19.458 seconds
Complete requests: 100000
Requests per second: 5139.34 [#/sec] (mean)
Time per request: 194.578 [ms] (mean)
Time per request: 0.195 [ms] (mean, across all
concurrent requests)
Intel i3 540 @ 3.07GHz / 8 GB RAM
44. Estructura de la applicación
misuperblog
|-- 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
45. El datastore
var 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();