SlideShare una empresa de Scribd logo
Node para Javeros
Conoce a tu enemigo
Micael Gallego (CodeURJC)
@micael_gallego
MAD · NOV 24-25 · 2017
Node para Javeros · @micael_gallego
Este quién es?
@micael_gallego
micael.gallego@urjc.es
@micaelgallego
Profesor Universitario / Formador & Consultor
Developer
Node para Javeros · @micael_gallego
Consultancy / Training
Cloud Computing
Web Technologies
Extreme Programming
Testing / Git / Jenkins
Software Architecture
Concurrent Programming
http://codeurjc.es
Open source elastic platform
for end to end testing
http://elastest.io
Log Analysis
Test orchestration and comparison
Web and Mobile testing
Security testing
IoT testing
Performance testing
Node para Javeros · @micael_gallego
Node para Javeros · @micael_gallego
Es de verdad Node.js tan
bueno como lo pintan?
Será una tecnología para hacer
software “de verdad”?
Me estaré haciendo
mayor?
Soy un Javasaurio?
I
Node para Javeros · @micael_gallego
Realmente
node.js se usa
tanto?
Node para Javeros · @micael_gallegohttps://medium.com/the-node-js-collection/node-js-state-of-the-union-blog-2017-ed86640ec451
Node.js Interactive 2017
https://nodejs.org/static/documents/casestudies/Nodejs_2017_User_Survey_Exec_Summary.pdf
2017 Node.js
Users Survey
vs
Node para Javeros · @micael_gallego
El lenguaje
(o los lenguajes)
Node para Javeros · @micael_gallego
Java Node
ES5 / ES6 / ES2016
Node para Javeros · @micael_gallego
Java vs TypeScript
●
Tipado estático
●
Imperativo y funcional
●
Recolector de basura
●
Orientado a objetos
●
Modularidad con paquetes
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre():string {
return this.nombre;
}
toString(): string{
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
TypeScript
Java vs TypeScript
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
Java vs TypeScript
Node para Javeros · @micael_gallego
● TypeScript es más flexible
– Tipado opcional
– Tipos union
– Objetos literales (sin clase)
– Cambio dinámico de objetos
– Implementación implícita de
interfaces
● Java es más rígido
– No funciones fuera de
objetos
– No inferencia de tipos*
– Clases para objetos
– Más verboso
* En Marzo 2018 lo tendremos
Java vs TypeScript
Pero son muy parecidos
Node para Javeros · @micael_gallego
Kotlin es mucho más parecido aTS que Java
●
Sintaxis más concisa
●
Funciones de alto nivel
●
Inferencia de tipos
●
Casting implícito con instanceof
●
Data classes
Java vs TypeScript
* Existe compilador de Kotlin a JavaScript
Node para Javeros · @micael_gallego
● Imperativo y
funcional
● Asíncrono / No
concurrente
● Muy flexible
● Tipado dinámico
● Funciones como
elementos de primera
clase
● Orientado a objetos
con prototipos
Node para Javeros · @micael_gallego
Afortunadamente JavaScript ha mejorado
mucho (muchísimo) con ES6 y ES7
● Async / Await
● Map
● Módulos
● Declaración let y const
● Arrow functions
● Clases
Node para Javeros · @micael_gallego
vs
Node para Javeros · @micael_gallego
vs
Ni idea…
habrá que
preguntar al
maestro Iván
López ;)
Node para Javeros · @micael_gallego
rígido, verboso
complicado
pero ordenado!
caótico, propenso a
errores, no estructurado
pero flexible!
Históricamente...
Node para Javeros · @micael_gallego
más flexible y
menos verboso
(lambdas)
Más estructurado y menos
propenso a errores
(let, arrow, modulos)
Actualmente...
Node para Javeros · @micael_gallego
Librerías
(la estándar y las de
terceros)
Node para Javeros · @micael_gallego
Librería estándar
Clases esenciales para
interoperabilidad, comunicación
con el sistema y red
Además de las esenciales,
Swing, AWT, CORBA, MIDI y
muuuuchas más ;)
Es uno de los motivos por los
que han creado módulos en
Java 9
Así se pueden crear paquetes
sólo con las clases esenciales
Librería estándar
Node para Javeros · @micael_gallego
https://www.npmjs.com/
https://search.maven.org/
Java Node
Librerías de terceros
Node para Javeros · @micael_gallegohttp://www.modulecounts.com/
Librerías de terceros
Node para Javeros · @micael_gallego
Hay “módulos” que
tienen una única
función, así
cualquiera ;)
https://www.npmjs.com/
https://www.npmjs.com/package/left-pad
Librerías de terceros
Node para Javeros · @micael_gallego
Project lifecycle
(aka building)
Node para Javeros · @micael_gallego
Project lifecycle
Java Node
Scripts
Declarative XML Logic
Declarative and imperative Groovy
Imperative JavaScript
Bash scripts & JavaScript tools
Node para Javeros · @micael_gallego
Siempre acabas
poniendo pegamento
en scripts ;)
Project lifecycle
Node para Javeros · @micael_gallego
Frameworks
Web / REST
Node para Javeros · @micael_gallego
Frameworks Web / REST
Uno de los usos princiaples de Java y Node es el
desarrollo de apps web MVC o con API REST
Navegador
web
Servidor
web
URL
HTML + Imágenes
JSON
Node para Javeros · @micael_gallego
Java EE / Servidores Web
Glassfish
● Un gran servidor
administrador
● Múltiples aplicaciones
Java desplegadas Tomcat
Frameworks Web / REST
Node para Javeros · @micael_gallego
Java EE / Servidores Web
● Ventajas
● Administración centralizada
● Desarrolladores
despreocupados de
aspectos de despliegue
● Inconvenientes
● Administración centralizada
● Desarrolladores
despreocupados de
aspectos de despliegue
Frameworks Web / REST
Node para Javeros · @micael_gallego
Java EE / Servidores Web
● Más inconvenientes
● Difícil actualizar el “servidor de
aplicaciones” por los problemas de
compatibilidad entre aplicaciones
● Muuuchos años con Java 6 ;)
● Desarrollo muy pesado
Frameworks Web / REST
Node para Javeros · @micael_gallego
Java EE / Servidores Web
● Más inconvenientes
● Difícil actualizar el “servidor de
aplicaciones” por los problemas de
compatibilidad entre aplicaciones
● Muuuchos años con Java 6 ;)
● Desarrollo muy pesado
Así se compartían
servidores cuando
la virtualización
no era mainstream
Frameworks Web / REST
Node para Javeros · @micael_gallego
● La app incluye el servidor, es autocontenida
● Arranca de forma instantánea
● Ciclo de editar / probar muy rápido
Frameworks Web / REST
Node para Javeros · @micael_gallego
Java se modernizó
En 2012 surgió el movimiento “containerless”
ofreciendo la misma experiencia en Java
spring
boot
Frameworks Web / REST
Node para Javeros · @micael_gallego
Estilo de programación
● Orientado a objetos (clases)
● Inyección de dependencias
● Síncrono (bloqueante)
● Anotaciones en código para
configuración
● Object Relational Mapping
(ORM) para BBDD SQL
● Funcional
● Asíncrono (no bloqueante)
● Configuración con funciones
● Bases de datos documentales
NoSQL (MongoDB)
tradicional...
Node para Javeros · @micael_gallego
Estilo de programación
● Funcional
● Asíncrono (no
bloqueante)
● Configuración
con funciones
en la actualidad...
import io.vertx.core.AbstractVerticle;
public class Server extends AbstractVerticle {
public void start() {
vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
}).listen(8080);
}
}
http://vertx.io/
Node para Javeros · @micael_gallego
Estilo de programación
● Funcional
● Asíncrono (no bloqueante)
● Configuración con funciones
en la actualidad...
RouterFunction<?> route = route(GET("/person/{id}"),
request -> {
Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id"))
.map(Integer::valueOf)
.then(repository::getPerson);
return Response.ok().body(fromPublisher(person, Person.class));
});
Reactor +
WebFlux
http://www.baeldung.com/spring-5-functional-web
Node para Javeros · @micael_gallego
Estilo de programación
● Aunque años de sólo programación síncrona tienen su
peso…
– Las herramientas, IDEs no están muy desarrolladas
– No hay drivers oficiales asíncronos a BBDD relacionales
– Hay clientes MySQL / PostgreSQL asíncronos pero
limitados en funcionalidad
en la actualidad...
https://github.com/mauricio/postgresql-async
Node para Javeros · @micael_gallego
Estilo de programación
La misma librería de programación reactiva para Java y Node
en la actualidad...
RxJava RxJS
Node para Javeros · @micael_gallego
Estilo de programación
● Orientado a Objetos
● Inyección de dependencias
● Clases y anotaciones
en la actualidad...
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() cat: Cat) {
this.catsService.create(cat);
}
}
Node para Javeros · @micael_gallego
Estilo de programación
en la actualidad...
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
age: number;
}
http://typeorm.io
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await repository.save(user);
const allUsers = await repository.find();
const firstUser = await repository.findOneById(1);
const timber = await repository.findOne({
firstName: "Timber", lastName: "Saw" });
await repository.remove(timber);
Node para Javeros · @micael_gallego
Estilo de programación
Cualquier estilo se puede usar
ambas plataformas
Node para Javeros · @micael_gallego
Rendimiento
(la máquina virtual)
Node para Javeros · @micael_gallego
JVM
Java Virtual Machine
vs
Node para Javeros · @micael_gallego
JVM
Java Virtual Machine
● Una de lasVMs más eficientes y optimizadas
● JIT compiler genera código muy optimizado
● Permite concurrencia conThreads del kernel del
sistema
● Gestión de memoria potente (Weak references)
Node para Javeros · @micael_gallego
● Una de lasVMs con menor latencia para iniciar
la ejecución de un programa
● Implementa un EventLoop
● Sólo permite un hilo de ejecución
Node para Javeros · @micael_gallego
Node para Javeros · @micael_gallego
Rendimiento
Modelo de concurrencia de
memoria mutable compartida
● Potente, bajo nivel, máximo
control
● Pero complejo… data races,
errores que aparecen cuando
hay mucha carga, difíciles de
depurar
Existe el paso de mensajes,
pero no se suele usar
● Fuerza el modelo asíncrono
(no bloqueante)
● Mucho más sencillo
● Más limitado para
aprovechar al máximo la
CPU
Sistemas Multicore
Node para Javeros · @micael_gallego
Rendimiento
Modelo bloqueante
● Un hilo por petición (hasta un
máximo)
● Con muchas peticiones que
esperen a la BBDD la mayor
parte del tiempo se
desperdician recursos
Modelo asíncrono
● Cuando la lógica tiene que
esperar por la respuesta de IO,
el hilo se aprovecha para otra
petición
● Se suelen tener tantos hilos
como cores
Escalabilidad
Node para Javeros · @micael_gallego
Rendimiento
Modelo asíncrono
● Un proceso node por core
● Balanceo con un router externo
● Se suelen comunicar usando
sistemas externos (Redis)
● Facilita escalabilidad horizontal
Escalabilidad
Node para Javeros · @micael_gallego
Rendimiento
https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
Node para Javeros · @micael_gallego
Rendimiento
https://www.tandemseven.com/blog/performance-java-vs-node/
Node para Javeros · @micael_gallego
Rendimiento
https://www.tandemseven.com/blog/performance-java-vs-node/
Node para Javeros · @micael_gallego
Rendimiento
● Cómo comparar?
– Cálculos intensivos?
– Uso intensivo de IO?
– Java síncrono vs Node asíncrono?Y los
dos asíncronos?
Node para Javeros · @micael_gallego
Rendimiento
● El rendimiento tiene muchas características y
significados. No bloqueante y reactivo en general no
hace que las aplicaciones se ejecuten más rápido.
● El beneficio del estilo no-bloqueante es la habilidad de
escalar con un número pequeño y fijo de hilos y menos
memoria. Eso hace a las aplicaciones más resilientes
bajo carga porque escalan de forma más predecible.
https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web-reactive.html#spring-webflux
Node para Javeros · @micael_gallego
Rendimiento
Si para tí lo más importante es el
rendimiento, por qué no
programas en C++? O en C?
O en ensamblador?
Node para Javeros · @micael_gallego
Rendimiento
https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web-reactive.html#spring-webflux
Te puedes
hacer tu
propio
procesador si
quieres (como
Google)
Node para Javeros · @micael_gallego
Conclusiones
Node para Javeros · @micael_gallego
●
Las plataformas cada vez se parecen más entre sí
●
Se puede elegir cualquier estilo de programación
– Lenguaje tipado estático o dinámico
– Mas orientado a objetos o más funcional
– Con o sin anotaciones
– Inyección de dependencias
●
Son comparables en rendimiento
vs
Node para Javeros · @micael_gallego
●
Elige plataforma, lenguaje y estilo en función de…
– Experiencia del equipo (frontend developers?)
– Importancia del rendimiento algoritmico vs IO
– Tamaño del equipo (cuanto más grande, más se valoran
los tipos estáticos)
– Riesgos asumibles (Java es rock solid)
vs
Node para Javeros · @micael_gallego
Usa el que más te guste!
Siempre podrás trolear el otro por algo ;)
vs
Node para Javeros · @micael_gallego
Puede tener sentido usar las dos tecnologías a la vez?
●
Es cada vez más habitual que una app con arquitectura
microservicios use tecnologías diferentes en cada
microservicio
vs
Node para Javeros · @micael_gallego
Puede tener sentido usar las dos tecnologías a la vez?
●
Netflix, arquitectura microservicios en Java, está
incorporando MS en NodeJS para Backend as a Service
vs
Node para Javeros · @micael_gallego
JAVEROS JAVASCRIPTERS
Node para Javeros
Conoce a tu enemigo
Micael Gallego (CodeURJC)
@micael_gallego
MAD · NOV 24-25 · 2017
Muchas Gracias!!

Más contenido relacionado

La actualidad más candente

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
Micael Gallego
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
Micael Gallego
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
Iván López Martín
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
Jobsket
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
Micael Gallego
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
Micael Gallego
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScriptPablo Bouzada
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
Micael Gallego
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
Jobsket
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
César Hernández
 
Angular 6
Angular 6Angular 6
Angular 6
Hugo Cuellar
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Micael Gallego
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP
Aprende PHP
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
Luis Guerrero
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
Dani Latorre
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
Luis Ruiz Pavón
 
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
César Hernández
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
César Hernández
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
Pedro J. Molina
 

La actualidad más candente (20)

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScript
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
Angular 6
Angular 6Angular 6
Angular 6
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 

Similar a Node para Javeros: Conoce a tu enemigo

Arquitectura
Arquitectura Arquitectura
Arquitectura
Antonio Manuel
 
003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf
DubiWeb.TK
 
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Pilmee Gates
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
Manuel Carrasco Moñino
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
Carlos Camacho
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
Manuel Carrasco Moñino
 
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
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
PiXeL16
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
Manuel de la Peña Peña
 
Jobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto realJobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto realJobsket
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
Zuriel Diaz
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
Carlos Camacho
 
.NET Core General - Globant Tech Insiders .Net
.NET Core General - Globant Tech Insiders .Net.NET Core General - Globant Tech Insiders .Net
.NET Core General - Globant Tech Insiders .Net
Globant
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
Roberto Sanz Ciriano
 
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
Richard Eliseo Mendoza Gafaro
 
Vuelven los "Pelochos"
Vuelven los "Pelochos"Vuelven los "Pelochos"
Vuelven los "Pelochos"
Javier Suárez Ruiz
 

Similar a Node para Javeros: Conoce a tu enemigo (20)

Arquitectura
Arquitectura Arquitectura
Arquitectura
 
003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf
 
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
SERVLET BASICS
SERVLET BASICSSERVLET BASICS
SERVLET BASICS
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Jobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto realJobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto real
 
Comenzando con GWT
Comenzando con GWTComenzando con GWT
Comenzando con GWT
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
.NET Core General - Globant Tech Insiders .Net
.NET Core General - Globant Tech Insiders .Net.NET Core General - Globant Tech Insiders .Net
.NET Core General - Globant Tech Insiders .Net
 
S4-PD1.pptx
S4-PD1.pptxS4-PD1.pptx
S4-PD1.pptx
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
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
 
Vuelven los "Pelochos"
Vuelven los "Pelochos"Vuelven los "Pelochos"
Vuelven los "Pelochos"
 

Más de Micael Gallego

La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...
Micael Gallego
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
Micael Gallego
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
Micael Gallego
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Micael Gallego
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
Micael Gallego
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Micael Gallego
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
Micael Gallego
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
Micael Gallego
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
Micael Gallego
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesor
Micael Gallego
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016
Micael Gallego
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Micael Gallego
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
Micael Gallego
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
Micael Gallego
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Micael Gallego
 

Más de Micael Gallego (16)

La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesor
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
 

Último

Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
Ecaresoft Inc.
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
juanjosebarreiro704
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
SamuelGampley
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
juanorejuela499
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
nicromante2000
 

Último (6)

Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 

Node para Javeros: Conoce a tu enemigo

  • 1. Node para Javeros Conoce a tu enemigo Micael Gallego (CodeURJC) @micael_gallego MAD · NOV 24-25 · 2017
  • 2. Node para Javeros · @micael_gallego Este quién es? @micael_gallego micael.gallego@urjc.es @micaelgallego Profesor Universitario / Formador & Consultor Developer
  • 3. Node para Javeros · @micael_gallego Consultancy / Training Cloud Computing Web Technologies Extreme Programming Testing / Git / Jenkins Software Architecture Concurrent Programming http://codeurjc.es Open source elastic platform for end to end testing http://elastest.io Log Analysis Test orchestration and comparison Web and Mobile testing Security testing IoT testing Performance testing
  • 4. Node para Javeros · @micael_gallego
  • 5. Node para Javeros · @micael_gallego Es de verdad Node.js tan bueno como lo pintan? Será una tecnología para hacer software “de verdad”? Me estaré haciendo mayor? Soy un Javasaurio? I
  • 6. Node para Javeros · @micael_gallego Realmente node.js se usa tanto?
  • 7. Node para Javeros · @micael_gallegohttps://medium.com/the-node-js-collection/node-js-state-of-the-union-blog-2017-ed86640ec451 Node.js Interactive 2017
  • 9.
  • 10. vs
  • 11.
  • 12. Node para Javeros · @micael_gallego El lenguaje (o los lenguajes)
  • 13. Node para Javeros · @micael_gallego Java Node ES5 / ES6 / ES2016
  • 14. Node para Javeros · @micael_gallego Java vs TypeScript ● Tipado estático ● Imperativo y funcional ● Recolector de basura ● Orientado a objetos ● Modularidad con paquetes
  • 15. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre():string { return this.nombre; } toString(): string{ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } TypeScript Java vs TypeScript
  • 16. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript Java vs TypeScript
  • 17. Node para Javeros · @micael_gallego ● TypeScript es más flexible – Tipado opcional – Tipos union – Objetos literales (sin clase) – Cambio dinámico de objetos – Implementación implícita de interfaces ● Java es más rígido – No funciones fuera de objetos – No inferencia de tipos* – Clases para objetos – Más verboso * En Marzo 2018 lo tendremos Java vs TypeScript Pero son muy parecidos
  • 18. Node para Javeros · @micael_gallego Kotlin es mucho más parecido aTS que Java ● Sintaxis más concisa ● Funciones de alto nivel ● Inferencia de tipos ● Casting implícito con instanceof ● Data classes Java vs TypeScript * Existe compilador de Kotlin a JavaScript
  • 19.
  • 20. Node para Javeros · @micael_gallego ● Imperativo y funcional ● Asíncrono / No concurrente ● Muy flexible ● Tipado dinámico ● Funciones como elementos de primera clase ● Orientado a objetos con prototipos
  • 21.
  • 22.
  • 23. Node para Javeros · @micael_gallego Afortunadamente JavaScript ha mejorado mucho (muchísimo) con ES6 y ES7 ● Async / Await ● Map ● Módulos ● Declaración let y const ● Arrow functions ● Clases
  • 24. Node para Javeros · @micael_gallego vs
  • 25. Node para Javeros · @micael_gallego vs Ni idea… habrá que preguntar al maestro Iván López ;)
  • 26. Node para Javeros · @micael_gallego rígido, verboso complicado pero ordenado! caótico, propenso a errores, no estructurado pero flexible! Históricamente...
  • 27. Node para Javeros · @micael_gallego más flexible y menos verboso (lambdas) Más estructurado y menos propenso a errores (let, arrow, modulos) Actualmente...
  • 28. Node para Javeros · @micael_gallego Librerías (la estándar y las de terceros)
  • 29. Node para Javeros · @micael_gallego Librería estándar Clases esenciales para interoperabilidad, comunicación con el sistema y red Además de las esenciales, Swing, AWT, CORBA, MIDI y muuuuchas más ;)
  • 30. Es uno de los motivos por los que han creado módulos en Java 9 Así se pueden crear paquetes sólo con las clases esenciales Librería estándar
  • 31. Node para Javeros · @micael_gallego https://www.npmjs.com/ https://search.maven.org/ Java Node Librerías de terceros
  • 32. Node para Javeros · @micael_gallegohttp://www.modulecounts.com/ Librerías de terceros
  • 33. Node para Javeros · @micael_gallego Hay “módulos” que tienen una única función, así cualquiera ;) https://www.npmjs.com/ https://www.npmjs.com/package/left-pad Librerías de terceros
  • 34. Node para Javeros · @micael_gallego Project lifecycle (aka building)
  • 35. Node para Javeros · @micael_gallego Project lifecycle Java Node Scripts Declarative XML Logic Declarative and imperative Groovy Imperative JavaScript Bash scripts & JavaScript tools
  • 36. Node para Javeros · @micael_gallego Siempre acabas poniendo pegamento en scripts ;) Project lifecycle
  • 37. Node para Javeros · @micael_gallego Frameworks Web / REST
  • 38. Node para Javeros · @micael_gallego Frameworks Web / REST Uno de los usos princiaples de Java y Node es el desarrollo de apps web MVC o con API REST Navegador web Servidor web URL HTML + Imágenes JSON
  • 39. Node para Javeros · @micael_gallego Java EE / Servidores Web Glassfish ● Un gran servidor administrador ● Múltiples aplicaciones Java desplegadas Tomcat Frameworks Web / REST
  • 40. Node para Javeros · @micael_gallego Java EE / Servidores Web ● Ventajas ● Administración centralizada ● Desarrolladores despreocupados de aspectos de despliegue ● Inconvenientes ● Administración centralizada ● Desarrolladores despreocupados de aspectos de despliegue Frameworks Web / REST
  • 41. Node para Javeros · @micael_gallego Java EE / Servidores Web ● Más inconvenientes ● Difícil actualizar el “servidor de aplicaciones” por los problemas de compatibilidad entre aplicaciones ● Muuuchos años con Java 6 ;) ● Desarrollo muy pesado Frameworks Web / REST
  • 42. Node para Javeros · @micael_gallego Java EE / Servidores Web ● Más inconvenientes ● Difícil actualizar el “servidor de aplicaciones” por los problemas de compatibilidad entre aplicaciones ● Muuuchos años con Java 6 ;) ● Desarrollo muy pesado Así se compartían servidores cuando la virtualización no era mainstream Frameworks Web / REST
  • 43. Node para Javeros · @micael_gallego ● La app incluye el servidor, es autocontenida ● Arranca de forma instantánea ● Ciclo de editar / probar muy rápido Frameworks Web / REST
  • 44. Node para Javeros · @micael_gallego Java se modernizó En 2012 surgió el movimiento “containerless” ofreciendo la misma experiencia en Java spring boot Frameworks Web / REST
  • 45. Node para Javeros · @micael_gallego Estilo de programación ● Orientado a objetos (clases) ● Inyección de dependencias ● Síncrono (bloqueante) ● Anotaciones en código para configuración ● Object Relational Mapping (ORM) para BBDD SQL ● Funcional ● Asíncrono (no bloqueante) ● Configuración con funciones ● Bases de datos documentales NoSQL (MongoDB) tradicional...
  • 46. Node para Javeros · @micael_gallego Estilo de programación ● Funcional ● Asíncrono (no bloqueante) ● Configuración con funciones en la actualidad... import io.vertx.core.AbstractVerticle; public class Server extends AbstractVerticle { public void start() { vertx.createHttpServer().requestHandler(req -> { req.response() .putHeader("content-type", "text/plain") .end("Hello from Vert.x!"); }).listen(8080); } } http://vertx.io/
  • 47. Node para Javeros · @micael_gallego Estilo de programación ● Funcional ● Asíncrono (no bloqueante) ● Configuración con funciones en la actualidad... RouterFunction<?> route = route(GET("/person/{id}"), request -> { Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id")) .map(Integer::valueOf) .then(repository::getPerson); return Response.ok().body(fromPublisher(person, Person.class)); }); Reactor + WebFlux http://www.baeldung.com/spring-5-functional-web
  • 48. Node para Javeros · @micael_gallego Estilo de programación ● Aunque años de sólo programación síncrona tienen su peso… – Las herramientas, IDEs no están muy desarrolladas – No hay drivers oficiales asíncronos a BBDD relacionales – Hay clientes MySQL / PostgreSQL asíncronos pero limitados en funcionalidad en la actualidad... https://github.com/mauricio/postgresql-async
  • 49. Node para Javeros · @micael_gallego Estilo de programación La misma librería de programación reactiva para Java y Node en la actualidad... RxJava RxJS
  • 50. Node para Javeros · @micael_gallego Estilo de programación ● Orientado a Objetos ● Inyección de dependencias ● Clases y anotaciones en la actualidad... @Controller('cats') export class CatsController { constructor(private catsService: CatsService) {} @Post() async create(@Body() cat: Cat) { this.catsService.create(cat); } }
  • 51. Node para Javeros · @micael_gallego Estilo de programación en la actualidad... @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() firstName: string; @Column() age: number; } http://typeorm.io const user = new User(); user.firstName = "Timber"; user.lastName = "Saw"; user.age = 25; await repository.save(user); const allUsers = await repository.find(); const firstUser = await repository.findOneById(1); const timber = await repository.findOne({ firstName: "Timber", lastName: "Saw" }); await repository.remove(timber);
  • 52. Node para Javeros · @micael_gallego Estilo de programación Cualquier estilo se puede usar ambas plataformas
  • 53. Node para Javeros · @micael_gallego Rendimiento (la máquina virtual)
  • 54. Node para Javeros · @micael_gallego JVM Java Virtual Machine vs
  • 55. Node para Javeros · @micael_gallego JVM Java Virtual Machine ● Una de lasVMs más eficientes y optimizadas ● JIT compiler genera código muy optimizado ● Permite concurrencia conThreads del kernel del sistema ● Gestión de memoria potente (Weak references)
  • 56. Node para Javeros · @micael_gallego ● Una de lasVMs con menor latencia para iniciar la ejecución de un programa ● Implementa un EventLoop ● Sólo permite un hilo de ejecución
  • 57. Node para Javeros · @micael_gallego
  • 58. Node para Javeros · @micael_gallego Rendimiento Modelo de concurrencia de memoria mutable compartida ● Potente, bajo nivel, máximo control ● Pero complejo… data races, errores que aparecen cuando hay mucha carga, difíciles de depurar Existe el paso de mensajes, pero no se suele usar ● Fuerza el modelo asíncrono (no bloqueante) ● Mucho más sencillo ● Más limitado para aprovechar al máximo la CPU Sistemas Multicore
  • 59. Node para Javeros · @micael_gallego Rendimiento Modelo bloqueante ● Un hilo por petición (hasta un máximo) ● Con muchas peticiones que esperen a la BBDD la mayor parte del tiempo se desperdician recursos Modelo asíncrono ● Cuando la lógica tiene que esperar por la respuesta de IO, el hilo se aprovecha para otra petición ● Se suelen tener tantos hilos como cores Escalabilidad
  • 60. Node para Javeros · @micael_gallego Rendimiento Modelo asíncrono ● Un proceso node por core ● Balanceo con un router externo ● Se suelen comunicar usando sistemas externos (Redis) ● Facilita escalabilidad horizontal Escalabilidad
  • 61. Node para Javeros · @micael_gallego Rendimiento https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
  • 62. Node para Javeros · @micael_gallego Rendimiento https://www.tandemseven.com/blog/performance-java-vs-node/
  • 63. Node para Javeros · @micael_gallego Rendimiento https://www.tandemseven.com/blog/performance-java-vs-node/
  • 64. Node para Javeros · @micael_gallego Rendimiento ● Cómo comparar? – Cálculos intensivos? – Uso intensivo de IO? – Java síncrono vs Node asíncrono?Y los dos asíncronos?
  • 65. Node para Javeros · @micael_gallego Rendimiento ● El rendimiento tiene muchas características y significados. No bloqueante y reactivo en general no hace que las aplicaciones se ejecuten más rápido. ● El beneficio del estilo no-bloqueante es la habilidad de escalar con un número pequeño y fijo de hilos y menos memoria. Eso hace a las aplicaciones más resilientes bajo carga porque escalan de forma más predecible. https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web-reactive.html#spring-webflux
  • 66. Node para Javeros · @micael_gallego Rendimiento Si para tí lo más importante es el rendimiento, por qué no programas en C++? O en C? O en ensamblador?
  • 67. Node para Javeros · @micael_gallego Rendimiento https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web-reactive.html#spring-webflux Te puedes hacer tu propio procesador si quieres (como Google)
  • 68. Node para Javeros · @micael_gallego Conclusiones
  • 69. Node para Javeros · @micael_gallego ● Las plataformas cada vez se parecen más entre sí ● Se puede elegir cualquier estilo de programación – Lenguaje tipado estático o dinámico – Mas orientado a objetos o más funcional – Con o sin anotaciones – Inyección de dependencias ● Son comparables en rendimiento vs
  • 70. Node para Javeros · @micael_gallego ● Elige plataforma, lenguaje y estilo en función de… – Experiencia del equipo (frontend developers?) – Importancia del rendimiento algoritmico vs IO – Tamaño del equipo (cuanto más grande, más se valoran los tipos estáticos) – Riesgos asumibles (Java es rock solid) vs
  • 71. Node para Javeros · @micael_gallego Usa el que más te guste! Siempre podrás trolear el otro por algo ;) vs
  • 72. Node para Javeros · @micael_gallego Puede tener sentido usar las dos tecnologías a la vez? ● Es cada vez más habitual que una app con arquitectura microservicios use tecnologías diferentes en cada microservicio vs
  • 73. Node para Javeros · @micael_gallego Puede tener sentido usar las dos tecnologías a la vez? ● Netflix, arquitectura microservicios en Java, está incorporando MS en NodeJS para Backend as a Service vs
  • 74. Node para Javeros · @micael_gallego JAVEROS JAVASCRIPTERS
  • 75. Node para Javeros Conoce a tu enemigo Micael Gallego (CodeURJC) @micael_gallego MAD · NOV 24-25 · 2017 Muchas Gracias!!