SlideShare una empresa de Scribd logo
1 de 34
Noviembre 2013

https://github.com/QuickTutorials/nodeJS

luis.gonzalez@beeva.com
carlos.hernadez@beeva.com
manuel.delavega@beeva.com
manuel.depaz@beeva.com
Estructura del curso
★
★
★
★
★
★
★
★
★
★
★

¿Javascript en el lado del servidor? Ideas y principios de Node.js
Benchmarking: Apache vs Node.js
Teoría de la programación en Javascript
Concurrencia, Ciclo de Eventos y I/O no bloqueante
JSON = JS Object Notation
Instalando node.js
Modules, packages, ... NPM
Developing and debugging with Eclipse
Otro IDE… en la nube
El estado del arte
Referencias y documentación
¿Qué es node.js?
Node.js es un entorno de programación en el lado del servidor basado en el
lenguaje de programación Javascript, con I/O de datos en una arquitectura
orientada a eventos, y creado a partir del motor del navegador Chrome: V8.
Fue creado con el enfoque de ser útil en la creación de programas de red
altamente escalables, como por ejemplo, servidores web.
Historia de node
●
●
●

La primera versión se publicó en 2009
Node es el entorno de ejecución más librerías.
Se ha creado a partir del motor V8 de Google Chrome:
8000 líneas de C/C++
2000 líneas de Javascript

●
●
●
●
●

Javascript del lado del servidor (SSJS)
Centrado en la eficiencia
Utiliza un ciclo de eventos en lugar de hilos nuevos por cada conexión (event loop).
Cada operación de I/O de node es asíncrona.
Puede manejar miles de conexiones simultáneas con una sobrecarga mínima en un sólo
proceso
Historia de node
¿Quién usa node?
Historia de node
¿Para qué se puede usar node?
●
●
●
●
●
●
●
●

Creación rápida de servidores http/tcp/… (http, net,...)
Aplicaciones Web (p.e. Express, Jade, …)
Servicios Web (p.e. Restify,...)
Conexión con Bases de datos (MySQL, MongoDB, SQlite)
Control de dispositivos Arduino (p.e. Johnny-Five)
Scripting y conversiones en local o en servidor (p.e. Less)
Manejo de flujos binarios por ejemplo para para Web RTC (p.e. Lynckia)
…

Todo esto se logra de forma ágil y rápida con las funcionalidades de node.js y a
través de multitud de módulos que siempre se intenta que se integren de forma
transparente bajo la misma perspectiva de rendimiento y asincronía.
Benchmarking: Apache vs Node.js
Node.js

Apache PHP

Leyenda
Fuente:

Usuarios Concurrentes

http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php
https://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests
http://blog.loadimpact.com/2013/02/01/node-js-vs-php-using-load-impact-to-visualize-node-js-efficency/

Tiempo de Respuesta
Uso de CPU en servidor
Benchmarking: Apache vs Node.js

Fuente: http://www.richwandell.com/wordpress/realistic-node-js-vs-apache-php-test/
Benchmarking: Apache vs Nginx
I/O latency
L1: 3 cycles
L2: 14 cycles
RAM: 250 cycles
DISK: 41,000,000 cycles
NETWORK: 240,000,000 cycles
Nginx también usa un ciclo de
eventos en lugar de una conexión
por hilo como Apache.
Fuente: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-
¿Por qué es más rápido Node.js?
Gracias a su naturaleza asíncrona Node no ocupa ciclos de procesador ni recursos cuando se
cambia de hilo o proceso.
500 milisegundos

llamada a
BBDD

llamada a
BBDD

IDLE

500 milisegundos

proceso
respuesta

programa síncrono java/php
...

proceso
respuesta

programa asíncrono en nodejs
¿Por qué es más rápido Node.js?
Node.js no es más
rápido…
pero maneja mucho mejor la
concurrencia “masiva” ya que
es asíncrono…
lo que da la apariencia
de ser más rápido.
Teoría de Javascript
●
●
●

Lenguaje interpretado
Débilmente tipado
Sobrecargado gracias a V8

pero también con
●
●
●
●
●

POO
Excepciones
Herencia
Prototipos
…

Ahora, lo que antes era window (front-side) es runtime (server-side)
Concurrencia, Ciclo de Eventos y I/O no bloqueante
PHP
<?php
$books = array("Myst: The Book of Atrus",
"Myst: The Book of Ti'ana",
"Myst: The Book of D'ni");
serveBooks($books);
function serveBooks($books) {
echo $html = '<b>' . join($books, '</b><br/><b>') . '</b>';
$books = array(); // Intentionally cleaned
}
?>

Node.js
var books = [ 'The Fellowship of the Ring',
'The Two Towers',
'The return of the King' ];
function serveBooks() {
var html = '<b>' + books.join('</b><br/><b>') + '</b>';
books = []; // Intentionally cleaned
}

Recordad Chavalada:
“Un gran poder conlleva una
gran responsabilidad”
Concurrencia, Ciclo de Eventos y I/O no bloqueante
PHP
<?php
print('Hello');
sleep(5);
print('World');
?>

Node.js
console.log('Hello');
setTimeout(function() {
console.log('World');
}, 5000);
console.log('(Im waiting here meanwhile... but not
blocked)');

// Imprime
Hello
(espera 5s)
World

// Imprime
Hello
I’m waiting here meanwhile… but not blocked
(espera 5s)
World
Concurrencia, Ciclo de Eventos y I/O no bloqueante
// Operaciones de E/S bloqueantes
var urls = db.query("select * from urls"); //esperar
urls.each(function(url) {
var page = http.get(url); //esperar
save(page); //esperar
});
// E/s No bloqueante, petición asíncrona
db.query("select * from urls", function(urls) {
url.each(function(url) {
http.get(url, function(page) {
save(page);
});
});
});
Concurrencia, Ciclo de Eventos y I/O no bloqueante
Aún así, siempre podemos hacerlo mal
var start = Date.now();
console.log('time at start? ' + start);
console.log('calling #1');
setTimeout(function() {
console.log('seconds elapsed at #1 function? '+ (Date.now()start));
for (var i=0;i<10000000000; i++) {
/* do nothing, but blocks the execution */
}
}, 1000);
console.log('calling #2');
setTimeout(function() {
console.log('seconds elapsed at #2 function? '+ (Date.now()start));
}, 2000);
console.log('EOF');

// Imprime
time at start? 1383521764394
calling #1
calling #2
EOF
seconds elapsed at #1 function?
1006
(espera 17s bloqueado)
seconds elapsed at #2 function?
17526
Concurrencia, Ciclo de Eventos y I/O no bloqueante
PHP (30s aprox = 3000 emails)
<?php
$addresses = array(
‘luis.gonzales@beeva.com',
‘carlos.hernadez@beeva.com',
‘manuel.delavega@beeva.com',
‘manuel.depaz@beeva.com'
);
$message = 'I am writing to inform you of a...';
$count = 0;
foreach($addresses as $person) {
// Attempt to send email.
if (mail($person, 'New opportunity', $message)) {
$count++;
}
}

Node.js (3s aprox = 3000 emails)
var mail = require('mail');
var addresses = [
‘luis.gonzales@beeva.com',
‘carlos.hernadez@beeva.com',
‘manuel.delavega@beeva.com',
‘manuel.depaz@beeva.com'];
var message = 'I am writing to inform you of a...';
var count = 0;
addresses.forEach(function(person, i) {
// Attempt to send email.
mail(person, 'New opportunity', message, function(err) {
if (!err) {
count++;
}
// Don't wait, get the next address NOW.
if (i == addresses.length - 1) {
console.log(count + " messages sent");
}

// Once email is sent, get the next address.
echo $count . "messages sent";
?>

});
});
Python Single Thread vs Node
Ejemplo gráfico acerca de qué significa
realmente asíncrono vs síncrono:
*Insertamos en python (sin hilos) 50 elementos en una tabla.
*Insertamos esos mismos 50 elementos con node.
¿Qué pasa?

fuente: https://github.com/roclas/nodejsutilities/tree/master/benchmarks
JSON = JS Object Notation
if (process.argv.length<3){
console.error("missing argument (file to parse)");
return(-1);
}
var fs = require('fs'),readline = require('readline');

Ejemplo práctico.
¿Que mejor lenguaje que javascript para
procesar objetos en notación javascript (json)?

var rd = readline.createInterface({
input: fs.createReadStream(process.argv[2]),
output: process.stdout,
terminal: false
});
rd.on('line', function(line) {
try {
var l=JSON.parse(line);
console.log(JSON.stringify(l,null,4));
} catch(error) {}
});

Fuente

https://github.com/roclas/nodejsutilities/blob/master/parse_json_lines.js
Instalando node.js
Descargamos la última versión desde: http://nodejs.org/download/
* Requiere Python 2.6+ si se quiere construir a partir de los fuentes
●

Instalar node.js en Ubuntu
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs npm

●

Compilar* e Instalar node.js en otras distribuciones:
apt-get install python g++ make
mkdir ~/nodejs && cd $_
wget -N http://nodejs.org/dist/node-latest.tar.gz
tar xzvf node-latest.tar.gz && cd `ls -rd node-v*`
./configure
make install

●

Microsoft Windows y Mac OS X tienen su propio asistente instalador:
http://nodejs.org/dist/v0.10.21/x64/node.exe (x64) o http://nodejs.org/dist/v0.10.21/node.exe (i386)
http://nodejs.org/dist/v0.10.21/node-v0.10.21.pkg (universal)
Modules, packages, ...

Packages per day across popular platforms. (Source: www.modulecounts.com)
Modules, packages, ...

Fuente https://www.modulecounts.com
Modules, packages, ...
Un módulo es cualquier cosa que pueda cargarse con un require() en un programa, por ejemplo:
●
●
●
●

Una carpeta con un fichero package.json que tiene dentro con un main().
Una carpeta con un fichero index.js.
Un fichero javascript cualquiera.
Un fichero json cualquiera.

Un paquete es:

A.

Una carpeta que contiene un programa descrito por un fichero package.json.

B.
C.
D.
E.
F.
G.

un tarball comprimido que contiene un A.
una url que resuelve a un B.
un <name>@<version> que es publicado mediante un C.
un <name>@<tag> que apunta a un D.
un <name> cuyo último tag satisface E.
una url Git que cuando es clonada se convierte en un A.
package.json
{
"name": "best-practices",
"description": "A package using versioning best-practices",
"author": "Charlie Robbins <charlie@nodejitsu.com>",
"dependencies": {
"colors": "0.x.x",
"express": "2.3.x",
"optimist": "0.2.x"
},
"devDependencies": {
"vows": "0.5.x"
},
"engine": "node >= 0.4.1"
}
Desarrollando y depurando con Eclipse
Hay dos alternativas para desarrollar con Eclipse:
●
Nodeclipse: http://dl.bintray.com/nodeclipse/nodeclipse/0.7.0/
●
eNide: http://www.nodeclipse.org/enide/studio/
Desarrollando y depurando en Chrome

Fuente: https://developers.google.com/chrome-developer-tools/docs/javascriptdebugging
Otro IDE… en la nube

https://c9.io
El estado del arte
A continuación os mostraremos una serie de
aplicaciones realizadas con Node.
Proxy inverso de CSS
Proxy inverso de CSS para desarrolladores de front.
Utilizado para no tener que instalar entornos
(eclipse+maven+tomcat+...¿?) si solo queremos editar css /
falsear ciertos servicios.

https://github.com/roclas/nodejsutilities
scripting…
Node.js se puede utilizar también para crear herramientas y programas para
línea de comando (CLI).
https://github.com/vonkhades/stem.js/wiki

intérprete

https://github.com/vonkhades/stem.js
angularjs+websocket+mongodb
El propósito de esta aplicación es ofrecer una arquitectura
completa basada en javascript para el desarrollo de
aplicaciones web, tanto el lado de servidor como el de front.
Hoy en día estos es posible gracias a entornos de ejecución
como NodeJS, que nos permiten programar nuestro backend
en javascript, pero también nos ayuda a realizar ciertas
tareas en el front.
La comunicación con el servidor en esta aplicación estará
basada en websockets, conectando con una base de datos
orientada a documentos (en nuestro caso una mongodb),
alojada en www.mongolab.com.

https://github.com/madelavega/angularjs-websocket-mongodb
Referencias y documentación
●
●

Web Oficial de Node.js: http://nodejs.org/
eBook Smashing Node.js http://smashingnode.com/

●
●
●
●
●

Presentación sobre el modelo I/O http://nodejs.org/jsconf.pdf
Artículo teórico sobre el diseño de node.js http://blog.nodejitsu.com/the-nodejs-philosophy
Artículo de introducción a NPM http://informatica27.wordpress.com/2012/04/18/una-introduccion-a-npm-nodejs/
Presentación node.js http://www.slideshare.net/gabriele.lana/nodejs-explained-with-examples
Presentación node.js http://blog.elfilo.net/charla_nodejs/

●
●
●
●

Blog con muchos ejemplos: http://howtonode.org/
Página web del proyecto V8 (Core del navegador Chrome): http://code.google.com/p/v8/
Repositorio con los ejemplos del curso en GitHub: https://github.com/QuickTutorials/nodeJS
Tutorial-Ejemplo de una aplicación con node.js y express: http://codehero.co/series/node-y-express/

●
●

Charla sobre Node.js en (castellano):
Charla de Node.js (castellano) http://www.tucamon.es/contenido/drupal-node-js

●

Benckmark Java EE vs Node http://bijoor.me/2013/06/09/java-ee-threads-vs-node-js-which-is-better-for-concurrent-data-processingoperations/
Ejercicio...
Ejemplos de infobox vcard

●

Crear un programa CLI o servidor que lea una pagina de la wikipedia como
parámetro, y si esa pagina tiene "infobox vcard" que regrese un JSON.

●

El programa deberá devolver específicamente el elemento DOM con clase
“vcard”

●

Utilizar jsdom https://github.com/tmpvar/jsdom para hacer el parser de HTML

●

Para leer parámetros (CLI) usar process.argv[XXX]

p.e. http://es.wikipedia.org/wiki/España

leer el HTML de la
wikipedia

parsear el elemento
DOM con clase css
“vcard”

recorrerlo y
generar un
json pantalla.

Más contenido relacionado

La actualidad más candente

Base De Datos Distribuidas
Base De Datos DistribuidasBase De Datos Distribuidas
Base De Datos DistribuidasJorge Guerra
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
Sistemas Distribuidos. Diseño e Implementacion
Sistemas Distribuidos. Diseño e ImplementacionSistemas Distribuidos. Diseño e Implementacion
Sistemas Distribuidos. Diseño e ImplementacionJorge Guerra
 
Ensayo. Enrutamiento entre las VLAN
Ensayo. Enrutamiento entre las VLANEnsayo. Enrutamiento entre las VLAN
Ensayo. Enrutamiento entre las VLANliras loca
 
Programación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UMLProgramación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UMLGabriel Cortez
 
Programación del lado del cliente
Programación del lado del clienteProgramación del lado del cliente
Programación del lado del clienteGabriel Mondragón
 
Concepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerConcepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerMarcos Omar Cruz Ortrega
 
Practicas Packet Tracer
Practicas Packet TracerPracticas Packet Tracer
Practicas Packet Tracermmgl1974
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidasMax Perez
 
Comandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchComandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchRobedgar MX
 
Instalacion de cassandra
Instalacion de cassandraInstalacion de cassandra
Instalacion de cassandraLuis Alvarado
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionEduardo J Onofre
 
Protocolos del Modelo OSI
Protocolos del Modelo OSIProtocolos del Modelo OSI
Protocolos del Modelo OSIPaola Orellana
 
Capa de Red del modelo OSI
Capa de Red del modelo OSICapa de Red del modelo OSI
Capa de Red del modelo OSINeryEdaly
 
Comandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoComandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoCISCO NETWORKING
 

La actualidad más candente (20)

Base De Datos Distribuidas
Base De Datos DistribuidasBase De Datos Distribuidas
Base De Datos Distribuidas
 
Front end y Back-end
Front end y Back-end Front end y Back-end
Front end y Back-end
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
analisis de aplicaciones web
analisis de aplicaciones webanalisis de aplicaciones web
analisis de aplicaciones web
 
Sistemas Distribuidos. Diseño e Implementacion
Sistemas Distribuidos. Diseño e ImplementacionSistemas Distribuidos. Diseño e Implementacion
Sistemas Distribuidos. Diseño e Implementacion
 
Ensayo. Enrutamiento entre las VLAN
Ensayo. Enrutamiento entre las VLANEnsayo. Enrutamiento entre las VLAN
Ensayo. Enrutamiento entre las VLAN
 
Programación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UMLProgramación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UML
 
Programación del lado del cliente
Programación del lado del clienteProgramación del lado del cliente
Programación del lado del cliente
 
Concepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson PenkerConcepto y extensiones de negocio de Eriksson Penker
Concepto y extensiones de negocio de Eriksson Penker
 
Ensayo wireshark
Ensayo wiresharkEnsayo wireshark
Ensayo wireshark
 
Gateway
GatewayGateway
Gateway
 
Practicas Packet Tracer
Practicas Packet TracerPracticas Packet Tracer
Practicas Packet Tracer
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidas
 
Comandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbenchComandos básicos para bases de datos mysql y workbench
Comandos básicos para bases de datos mysql y workbench
 
Instalacion de cassandra
Instalacion de cassandraInstalacion de cassandra
Instalacion de cassandra
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacion
 
Protocolos del Modelo OSI
Protocolos del Modelo OSIProtocolos del Modelo OSI
Protocolos del Modelo OSI
 
Capa de Red del modelo OSI
Capa de Red del modelo OSICapa de Red del modelo OSI
Capa de Red del modelo OSI
 
Bases de datos orientadas a objetos
Bases de datos orientadas a objetosBases de datos orientadas a objetos
Bases de datos orientadas a objetos
 
Comandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoComandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos cisco
 

Similar a Introducción a NodeJS

Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmasZuriel Diaz
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.Luis Toscano
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Ignacio Muñoz Vicente
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para TodosMariano Iglesias
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesDani Latorre
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackPedro J. Molina
 
24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdf24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdfmabytax
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Nelson Rojas Núñez
 

Similar a Introducción a NodeJS (20)

Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Presentacion node
Presentacion nodePresentacion node
Presentacion node
 
Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdf24. Introducción a Node JS.pdf
24. Introducción a Node JS.pdf
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Arquitectura
Arquitectura Arquitectura
Arquitectura
 

Más de BEEVA_es

BEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA_es
 
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingJustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingBEEVA_es
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
BEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA_es
 
BEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA_es
 
BEEVA | Ruling the world galaxy with your voice and the cloud
 BEEVA | Ruling the world galaxy with your voice and the cloud BEEVA | Ruling the world galaxy with your voice and the cloud
BEEVA | Ruling the world galaxy with your voice and the cloudBEEVA_es
 
WORKSHOP II: API REST
WORKSHOP II: API RESTWORKSHOP II: API REST
WORKSHOP II: API RESTBEEVA_es
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
[API Days] Cooking with apis
[API Days] Cooking with apis[API Days] Cooking with apis
[API Days] Cooking with apisBEEVA_es
 
Como ganar un hackathon
Como ganar un hackathonComo ganar un hackathon
Como ganar un hackathonBEEVA_es
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No RelacionalesBEEVA_es
 
Curso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVACurso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVABEEVA_es
 
Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0BEEVA_es
 
Desmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataDesmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataBEEVA_es
 
Cómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónCómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónBEEVA_es
 
Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT BEEVA_es
 
Siete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataSiete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataBEEVA_es
 
Bases de Datos no relacionales
Bases de Datos no relacionalesBases de Datos no relacionales
Bases de Datos no relacionalesBEEVA_es
 
Data Platform de BEEVA
Data Platform de BEEVAData Platform de BEEVA
Data Platform de BEEVABEEVA_es
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsBEEVA_es
 

Más de BEEVA_es (20)

BEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of today
 
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingJustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
BEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbots
 
BEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA | Crear bots avanzados
BEEVA | Crear bots avanzados
 
BEEVA | Ruling the world galaxy with your voice and the cloud
 BEEVA | Ruling the world galaxy with your voice and the cloud BEEVA | Ruling the world galaxy with your voice and the cloud
BEEVA | Ruling the world galaxy with your voice and the cloud
 
WORKSHOP II: API REST
WORKSHOP II: API RESTWORKSHOP II: API REST
WORKSHOP II: API REST
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
[API Days] Cooking with apis
[API Days] Cooking with apis[API Days] Cooking with apis
[API Days] Cooking with apis
 
Como ganar un hackathon
Como ganar un hackathonComo ganar un hackathon
Como ganar un hackathon
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No Relacionales
 
Curso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVACurso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVA
 
Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0
 
Desmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataDesmitificando un proyecto de Big Data
Desmitificando un proyecto de Big Data
 
Cómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónCómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organización
 
Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT
 
Siete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataSiete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big Data
 
Bases de Datos no relacionales
Bases de Datos no relacionalesBases de Datos no relacionales
Bases de Datos no relacionales
 
Data Platform de BEEVA
Data Platform de BEEVAData Platform de BEEVA
Data Platform de BEEVA
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 

Último

Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 

Último (20)

Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 

Introducción a NodeJS

  • 2. Estructura del curso ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ¿Javascript en el lado del servidor? Ideas y principios de Node.js Benchmarking: Apache vs Node.js Teoría de la programación en Javascript Concurrencia, Ciclo de Eventos y I/O no bloqueante JSON = JS Object Notation Instalando node.js Modules, packages, ... NPM Developing and debugging with Eclipse Otro IDE… en la nube El estado del arte Referencias y documentación
  • 3. ¿Qué es node.js? Node.js es un entorno de programación en el lado del servidor basado en el lenguaje de programación Javascript, con I/O de datos en una arquitectura orientada a eventos, y creado a partir del motor del navegador Chrome: V8. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.
  • 4. Historia de node ● ● ● La primera versión se publicó en 2009 Node es el entorno de ejecución más librerías. Se ha creado a partir del motor V8 de Google Chrome: 8000 líneas de C/C++ 2000 líneas de Javascript ● ● ● ● ● Javascript del lado del servidor (SSJS) Centrado en la eficiencia Utiliza un ciclo de eventos en lugar de hilos nuevos por cada conexión (event loop). Cada operación de I/O de node es asíncrona. Puede manejar miles de conexiones simultáneas con una sobrecarga mínima en un sólo proceso
  • 6. Historia de node ¿Para qué se puede usar node? ● ● ● ● ● ● ● ● Creación rápida de servidores http/tcp/… (http, net,...) Aplicaciones Web (p.e. Express, Jade, …) Servicios Web (p.e. Restify,...) Conexión con Bases de datos (MySQL, MongoDB, SQlite) Control de dispositivos Arduino (p.e. Johnny-Five) Scripting y conversiones en local o en servidor (p.e. Less) Manejo de flujos binarios por ejemplo para para Web RTC (p.e. Lynckia) … Todo esto se logra de forma ágil y rápida con las funcionalidades de node.js y a través de multitud de módulos que siempre se intenta que se integren de forma transparente bajo la misma perspectiva de rendimiento y asincronía.
  • 7.
  • 8. Benchmarking: Apache vs Node.js Node.js Apache PHP Leyenda Fuente: Usuarios Concurrentes http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php https://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests http://blog.loadimpact.com/2013/02/01/node-js-vs-php-using-load-impact-to-visualize-node-js-efficency/ Tiempo de Respuesta Uso de CPU en servidor
  • 9. Benchmarking: Apache vs Node.js Fuente: http://www.richwandell.com/wordpress/realistic-node-js-vs-apache-php-test/
  • 10. Benchmarking: Apache vs Nginx I/O latency L1: 3 cycles L2: 14 cycles RAM: 250 cycles DISK: 41,000,000 cycles NETWORK: 240,000,000 cycles Nginx también usa un ciclo de eventos en lugar de una conexión por hilo como Apache. Fuente: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-
  • 11. ¿Por qué es más rápido Node.js? Gracias a su naturaleza asíncrona Node no ocupa ciclos de procesador ni recursos cuando se cambia de hilo o proceso. 500 milisegundos llamada a BBDD llamada a BBDD IDLE 500 milisegundos proceso respuesta programa síncrono java/php ... proceso respuesta programa asíncrono en nodejs
  • 12. ¿Por qué es más rápido Node.js? Node.js no es más rápido… pero maneja mucho mejor la concurrencia “masiva” ya que es asíncrono… lo que da la apariencia de ser más rápido.
  • 13. Teoría de Javascript ● ● ● Lenguaje interpretado Débilmente tipado Sobrecargado gracias a V8 pero también con ● ● ● ● ● POO Excepciones Herencia Prototipos … Ahora, lo que antes era window (front-side) es runtime (server-side)
  • 14. Concurrencia, Ciclo de Eventos y I/O no bloqueante PHP <?php $books = array("Myst: The Book of Atrus", "Myst: The Book of Ti'ana", "Myst: The Book of D'ni"); serveBooks($books); function serveBooks($books) { echo $html = '<b>' . join($books, '</b><br/><b>') . '</b>'; $books = array(); // Intentionally cleaned } ?> Node.js var books = [ 'The Fellowship of the Ring', 'The Two Towers', 'The return of the King' ]; function serveBooks() { var html = '<b>' + books.join('</b><br/><b>') + '</b>'; books = []; // Intentionally cleaned } Recordad Chavalada: “Un gran poder conlleva una gran responsabilidad”
  • 15. Concurrencia, Ciclo de Eventos y I/O no bloqueante PHP <?php print('Hello'); sleep(5); print('World'); ?> Node.js console.log('Hello'); setTimeout(function() { console.log('World'); }, 5000); console.log('(Im waiting here meanwhile... but not blocked)'); // Imprime Hello (espera 5s) World // Imprime Hello I’m waiting here meanwhile… but not blocked (espera 5s) World
  • 16. Concurrencia, Ciclo de Eventos y I/O no bloqueante // Operaciones de E/S bloqueantes var urls = db.query("select * from urls"); //esperar urls.each(function(url) { var page = http.get(url); //esperar save(page); //esperar }); // E/s No bloqueante, petición asíncrona db.query("select * from urls", function(urls) { url.each(function(url) { http.get(url, function(page) { save(page); }); }); });
  • 17. Concurrencia, Ciclo de Eventos y I/O no bloqueante Aún así, siempre podemos hacerlo mal var start = Date.now(); console.log('time at start? ' + start); console.log('calling #1'); setTimeout(function() { console.log('seconds elapsed at #1 function? '+ (Date.now()start)); for (var i=0;i<10000000000; i++) { /* do nothing, but blocks the execution */ } }, 1000); console.log('calling #2'); setTimeout(function() { console.log('seconds elapsed at #2 function? '+ (Date.now()start)); }, 2000); console.log('EOF'); // Imprime time at start? 1383521764394 calling #1 calling #2 EOF seconds elapsed at #1 function? 1006 (espera 17s bloqueado) seconds elapsed at #2 function? 17526
  • 18. Concurrencia, Ciclo de Eventos y I/O no bloqueante PHP (30s aprox = 3000 emails) <?php $addresses = array( ‘luis.gonzales@beeva.com', ‘carlos.hernadez@beeva.com', ‘manuel.delavega@beeva.com', ‘manuel.depaz@beeva.com' ); $message = 'I am writing to inform you of a...'; $count = 0; foreach($addresses as $person) { // Attempt to send email. if (mail($person, 'New opportunity', $message)) { $count++; } } Node.js (3s aprox = 3000 emails) var mail = require('mail'); var addresses = [ ‘luis.gonzales@beeva.com', ‘carlos.hernadez@beeva.com', ‘manuel.delavega@beeva.com', ‘manuel.depaz@beeva.com']; var message = 'I am writing to inform you of a...'; var count = 0; addresses.forEach(function(person, i) { // Attempt to send email. mail(person, 'New opportunity', message, function(err) { if (!err) { count++; } // Don't wait, get the next address NOW. if (i == addresses.length - 1) { console.log(count + " messages sent"); } // Once email is sent, get the next address. echo $count . "messages sent"; ?> }); });
  • 19. Python Single Thread vs Node Ejemplo gráfico acerca de qué significa realmente asíncrono vs síncrono: *Insertamos en python (sin hilos) 50 elementos en una tabla. *Insertamos esos mismos 50 elementos con node. ¿Qué pasa? fuente: https://github.com/roclas/nodejsutilities/tree/master/benchmarks
  • 20. JSON = JS Object Notation if (process.argv.length<3){ console.error("missing argument (file to parse)"); return(-1); } var fs = require('fs'),readline = require('readline'); Ejemplo práctico. ¿Que mejor lenguaje que javascript para procesar objetos en notación javascript (json)? var rd = readline.createInterface({ input: fs.createReadStream(process.argv[2]), output: process.stdout, terminal: false }); rd.on('line', function(line) { try { var l=JSON.parse(line); console.log(JSON.stringify(l,null,4)); } catch(error) {} }); Fuente https://github.com/roclas/nodejsutilities/blob/master/parse_json_lines.js
  • 21. Instalando node.js Descargamos la última versión desde: http://nodejs.org/download/ * Requiere Python 2.6+ si se quiere construir a partir de los fuentes ● Instalar node.js en Ubuntu sudo apt-get install python-software-properties sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs npm ● Compilar* e Instalar node.js en otras distribuciones: apt-get install python g++ make mkdir ~/nodejs && cd $_ wget -N http://nodejs.org/dist/node-latest.tar.gz tar xzvf node-latest.tar.gz && cd `ls -rd node-v*` ./configure make install ● Microsoft Windows y Mac OS X tienen su propio asistente instalador: http://nodejs.org/dist/v0.10.21/x64/node.exe (x64) o http://nodejs.org/dist/v0.10.21/node.exe (i386) http://nodejs.org/dist/v0.10.21/node-v0.10.21.pkg (universal)
  • 22. Modules, packages, ... Packages per day across popular platforms. (Source: www.modulecounts.com)
  • 23. Modules, packages, ... Fuente https://www.modulecounts.com
  • 24. Modules, packages, ... Un módulo es cualquier cosa que pueda cargarse con un require() en un programa, por ejemplo: ● ● ● ● Una carpeta con un fichero package.json que tiene dentro con un main(). Una carpeta con un fichero index.js. Un fichero javascript cualquiera. Un fichero json cualquiera. Un paquete es: A. Una carpeta que contiene un programa descrito por un fichero package.json. B. C. D. E. F. G. un tarball comprimido que contiene un A. una url que resuelve a un B. un <name>@<version> que es publicado mediante un C. un <name>@<tag> que apunta a un D. un <name> cuyo último tag satisface E. una url Git que cuando es clonada se convierte en un A.
  • 25. package.json { "name": "best-practices", "description": "A package using versioning best-practices", "author": "Charlie Robbins <charlie@nodejitsu.com>", "dependencies": { "colors": "0.x.x", "express": "2.3.x", "optimist": "0.2.x" }, "devDependencies": { "vows": "0.5.x" }, "engine": "node >= 0.4.1" }
  • 26. Desarrollando y depurando con Eclipse Hay dos alternativas para desarrollar con Eclipse: ● Nodeclipse: http://dl.bintray.com/nodeclipse/nodeclipse/0.7.0/ ● eNide: http://www.nodeclipse.org/enide/studio/
  • 27. Desarrollando y depurando en Chrome Fuente: https://developers.google.com/chrome-developer-tools/docs/javascriptdebugging
  • 28. Otro IDE… en la nube https://c9.io
  • 29. El estado del arte A continuación os mostraremos una serie de aplicaciones realizadas con Node.
  • 30. Proxy inverso de CSS Proxy inverso de CSS para desarrolladores de front. Utilizado para no tener que instalar entornos (eclipse+maven+tomcat+...¿?) si solo queremos editar css / falsear ciertos servicios. https://github.com/roclas/nodejsutilities
  • 31. scripting… Node.js se puede utilizar también para crear herramientas y programas para línea de comando (CLI). https://github.com/vonkhades/stem.js/wiki intérprete https://github.com/vonkhades/stem.js
  • 32. angularjs+websocket+mongodb El propósito de esta aplicación es ofrecer una arquitectura completa basada en javascript para el desarrollo de aplicaciones web, tanto el lado de servidor como el de front. Hoy en día estos es posible gracias a entornos de ejecución como NodeJS, que nos permiten programar nuestro backend en javascript, pero también nos ayuda a realizar ciertas tareas en el front. La comunicación con el servidor en esta aplicación estará basada en websockets, conectando con una base de datos orientada a documentos (en nuestro caso una mongodb), alojada en www.mongolab.com. https://github.com/madelavega/angularjs-websocket-mongodb
  • 33. Referencias y documentación ● ● Web Oficial de Node.js: http://nodejs.org/ eBook Smashing Node.js http://smashingnode.com/ ● ● ● ● ● Presentación sobre el modelo I/O http://nodejs.org/jsconf.pdf Artículo teórico sobre el diseño de node.js http://blog.nodejitsu.com/the-nodejs-philosophy Artículo de introducción a NPM http://informatica27.wordpress.com/2012/04/18/una-introduccion-a-npm-nodejs/ Presentación node.js http://www.slideshare.net/gabriele.lana/nodejs-explained-with-examples Presentación node.js http://blog.elfilo.net/charla_nodejs/ ● ● ● ● Blog con muchos ejemplos: http://howtonode.org/ Página web del proyecto V8 (Core del navegador Chrome): http://code.google.com/p/v8/ Repositorio con los ejemplos del curso en GitHub: https://github.com/QuickTutorials/nodeJS Tutorial-Ejemplo de una aplicación con node.js y express: http://codehero.co/series/node-y-express/ ● ● Charla sobre Node.js en (castellano): Charla de Node.js (castellano) http://www.tucamon.es/contenido/drupal-node-js ● Benckmark Java EE vs Node http://bijoor.me/2013/06/09/java-ee-threads-vs-node-js-which-is-better-for-concurrent-data-processingoperations/
  • 34. Ejercicio... Ejemplos de infobox vcard ● Crear un programa CLI o servidor que lea una pagina de la wikipedia como parámetro, y si esa pagina tiene "infobox vcard" que regrese un JSON. ● El programa deberá devolver específicamente el elemento DOM con clase “vcard” ● Utilizar jsdom https://github.com/tmpvar/jsdom para hacer el parser de HTML ● Para leer parámetros (CLI) usar process.argv[XXX] p.e. http://es.wikipedia.org/wiki/España leer el HTML de la wikipedia parsear el elemento DOM con clase css “vcard” recorrerlo y generar un json pantalla.