SlideShare a Scribd company logo
1 of 26
A meetup in Valencia for people that hack JavaScript
Things I wish someone
told me about Node.js
So I don’t shoot myself in the foot
(again).
Backend Developer
Usando Node ~2 años
Por ahora estoy por mi cuenta.
Alexandre Ferrando
¿De cuantas formas te puedes pegar
un tiro en el pie usando node?
Demasiadas, a hablar de algunas:
● Pequeñas cosas
● Callback Hell
● Event loop
Las pequeñas cosas
(que pican como un corte de papel)
Doble callback
Doble callback: solución
Depurar con console.log
debug
Salida por consola activable
vía variable de entorno
Posibilidad de nombrar
cada fichero a trazar
winston o bunyan
Serializan objetos
Salida a donde quieras
Formato JSON
Bunyan tiene bunyan-cli
para procesar logs
Depuración en general
Generales:
perf
dtrace
strace
Node:
node-inspector
memwatch + heapdump
+ chrome-dev-tools
tick
Callback Hell
(Quemaduras de 2º grado)
Callback Hell
Mejor no arder...
Promesas:
(bluebird)
¿Brujeria?
● ¿Qué esperan de mí los módulos de promesas?
o callbacks(err, res), el error siempre primero
o return del resultado
o throw del error
● ¿Y ya está?
o Si, lo básico si.
¿Y… cómo las uso?
1. Adaptar el
módulo que
quieras usar
2. Usarlo:
algo.then….
3. .catch, por si las
moscas
The Event Loop
(Esas cosas que te vuelan media pierna)
Javascript… sweet painful Javascript
● En Javascript, y especialmente en Node:
o Todo funciona en paralelo…
o Excepto tu código
● O dicho de otra forma:
o Un único hilo para el código JS ( V8 )
o Un manejador de eventos que distribuye el I/O
o libuv por debajo manejando I/O en paralelo
Y todo esto es algo así
Problems
● setTimeout, setImmediate, setInterval
o únicamente tienes asegurado que se van a atender
después del tiempo especificado
● Hay callbacks, y luego señores callbacks
● Una operación intensiva de CPU bloquea el event loop
o Se encolan eventos pero no se atienden callbacks
Una iteración del event loop
Callbacks asíncronos de verdad
La primera función
no deja que otro
código js se ejecute.
La segunda si,
encola el callback
hasta que pueda ser
atendido
Dear CPU...
● Como hemos visto cualquier tipo de código
o Extenso
o Complejo
o Pesado
Que no cede el turno de ejecución puede
bloquear completamente otros eventos o
partes de nuestro código
Dear CPU...
● Soluciones:
o cluster
o child_process
o worker-farm
Cluster
● Módulo core de node
● Permite levantar procesos clones ( fork )
o Un maestro, cuantos quieras esclavos
o El maestro recibe eventos de los otros
o Se pueden enviar mensajes entre ellos
o Comparten puertos pero no memoria
o No evita que las peticiones de uno queden en
espera si este se bloquea, pero el resto siguen
atendiendo
child_process
● Módulo core de node
● Permite levantar procesos cualquiera ( exec )
o El padre recibe ciertos eventos del hijo
o Se pueden enviar mensajes entre ellos
o No comparten nada
o Solventa el bloqueo de tu event loop si le envias al
child la computación pesada y esperas su respuesta
o Puede dar lugar a un número descontrolado de
childs o un child sobrecargado.
worker-farm
● Módulo de npm
● child_process automatizado, con esteroides
o Concepto thread pool
o Configurable: reintentos, tiempo de espera, número
de workers…
o Pierdes el paso de mensajes, pero no tienes que
implementar tu todo lo anterior
Espero que haya menos plomo en
vuestros pies ahora.
Gracias
Preguntas:
alferpal@gmail.com @alferpal

More Related Content

Similar to Things i wish someone told me about node js

Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Telefónica
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2Luis Cigarroa
 
Sistemas Operativos Gestion de procesos
Sistemas Operativos Gestion de procesosSistemas Operativos Gestion de procesos
Sistemas Operativos Gestion de procesosChiNo Sosa Erazo
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJano González
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptxjuan gonzalez
 
Tema 6 Cont www.fresymetal.com
Tema 6 Cont www.fresymetal.comTema 6 Cont www.fresymetal.com
Tema 6 Cont www.fresymetal.comFresyMetal
 
Cómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPCómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPJavier Carranza
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada bcoca
 
Curso de software03
Curso de software03Curso de software03
Curso de software03enriqueaco
 
Manual de hacking basico por taskkill#3
Manual de hacking basico por taskkill#3Manual de hacking basico por taskkill#3
Manual de hacking basico por taskkill#3Brat Stell
 
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]RootedCON
 

Similar to Things i wish someone told me about node js (20)

Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2
 
Sistemas Operativos Gestion de procesos
Sistemas Operativos Gestion de procesosSistemas Operativos Gestion de procesos
Sistemas Operativos Gestion de procesos
 
SyntheticEvent – React.pdf
SyntheticEvent – React.pdfSyntheticEvent – React.pdf
SyntheticEvent – React.pdf
 
Practica cliente servidor java
Practica cliente servidor javaPractica cliente servidor java
Practica cliente servidor java
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
7 curso
7 curso7 curso
7 curso
 
Jano Gonzalez - jruby
Jano Gonzalez - jrubyJano Gonzalez - jruby
Jano Gonzalez - jruby
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptx
 
Tema 6 Cont www.fresymetal.com
Tema 6 Cont www.fresymetal.comTema 6 Cont www.fresymetal.com
Tema 6 Cont www.fresymetal.com
 
Modelo paso de mensajes
Modelo paso de mensajesModelo paso de mensajes
Modelo paso de mensajes
 
Cómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPCómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMP
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Curso de software03
Curso de software03Curso de software03
Curso de software03
 
Manual de hacking basico por taskkill#3
Manual de hacking basico por taskkill#3Manual de hacking basico por taskkill#3
Manual de hacking basico por taskkill#3
 
Bd nosql tecnicas III
Bd nosql tecnicas IIIBd nosql tecnicas III
Bd nosql tecnicas III
 
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
 

Things i wish someone told me about node js

  • 1. A meetup in Valencia for people that hack JavaScript
  • 2. Things I wish someone told me about Node.js So I don’t shoot myself in the foot (again).
  • 3. Backend Developer Usando Node ~2 años Por ahora estoy por mi cuenta. Alexandre Ferrando
  • 4. ¿De cuantas formas te puedes pegar un tiro en el pie usando node? Demasiadas, a hablar de algunas: ● Pequeñas cosas ● Callback Hell ● Event loop
  • 5. Las pequeñas cosas (que pican como un corte de papel)
  • 8. Depurar con console.log debug Salida por consola activable vía variable de entorno Posibilidad de nombrar cada fichero a trazar winston o bunyan Serializan objetos Salida a donde quieras Formato JSON Bunyan tiene bunyan-cli para procesar logs
  • 13. ¿Brujeria? ● ¿Qué esperan de mí los módulos de promesas? o callbacks(err, res), el error siempre primero o return del resultado o throw del error ● ¿Y ya está? o Si, lo básico si.
  • 14. ¿Y… cómo las uso? 1. Adaptar el módulo que quieras usar 2. Usarlo: algo.then…. 3. .catch, por si las moscas
  • 15. The Event Loop (Esas cosas que te vuelan media pierna)
  • 16. Javascript… sweet painful Javascript ● En Javascript, y especialmente en Node: o Todo funciona en paralelo… o Excepto tu código ● O dicho de otra forma: o Un único hilo para el código JS ( V8 ) o Un manejador de eventos que distribuye el I/O o libuv por debajo manejando I/O en paralelo
  • 17. Y todo esto es algo así
  • 18. Problems ● setTimeout, setImmediate, setInterval o únicamente tienes asegurado que se van a atender después del tiempo especificado ● Hay callbacks, y luego señores callbacks ● Una operación intensiva de CPU bloquea el event loop o Se encolan eventos pero no se atienden callbacks
  • 19. Una iteración del event loop
  • 20. Callbacks asíncronos de verdad La primera función no deja que otro código js se ejecute. La segunda si, encola el callback hasta que pueda ser atendido
  • 21. Dear CPU... ● Como hemos visto cualquier tipo de código o Extenso o Complejo o Pesado Que no cede el turno de ejecución puede bloquear completamente otros eventos o partes de nuestro código
  • 22. Dear CPU... ● Soluciones: o cluster o child_process o worker-farm
  • 23. Cluster ● Módulo core de node ● Permite levantar procesos clones ( fork ) o Un maestro, cuantos quieras esclavos o El maestro recibe eventos de los otros o Se pueden enviar mensajes entre ellos o Comparten puertos pero no memoria o No evita que las peticiones de uno queden en espera si este se bloquea, pero el resto siguen atendiendo
  • 24. child_process ● Módulo core de node ● Permite levantar procesos cualquiera ( exec ) o El padre recibe ciertos eventos del hijo o Se pueden enviar mensajes entre ellos o No comparten nada o Solventa el bloqueo de tu event loop si le envias al child la computación pesada y esperas su respuesta o Puede dar lugar a un número descontrolado de childs o un child sobrecargado.
  • 25. worker-farm ● Módulo de npm ● child_process automatizado, con esteroides o Concepto thread pool o Configurable: reintentos, tiempo de espera, número de workers… o Pierdes el paso de mensajes, pero no tienes que implementar tu todo lo anterior
  • 26. Espero que haya menos plomo en vuestros pies ahora. Gracias Preguntas: alferpal@gmail.com @alferpal