Things i wish someone told me about node js

26
A meetup in Valencia for people that hack JavaScript

Transcript of Things i wish someone told me about node js

Page 1: Things i wish someone told me about node js

A meetup in Valencia for people that hack JavaScript

Page 2: Things i wish someone told me about node js

Things I wish someone told me about Node.js

So I don’t shoot myself in the foot (again).

Page 3: Things i wish someone told me about node js

Backend DeveloperUsando Node ~2 años

Por ahora estoy por mi cuenta.

Alexandre Ferrando

Page 4: Things i wish someone told me about node js

¿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

Page 5: Things i wish someone told me about node js

Las pequeñas cosas(que pican como un corte de papel)

Page 6: Things i wish someone told me about node js

Doble callback

Page 7: Things i wish someone told me about node js

Doble callback: solución

Page 8: Things i wish someone told me about node js

Depurar con console.log

debugSalida por consola activable vía variable de entornoPosibilidad de nombrar cada fichero a trazar

winston o bunyanSerializan objetosSalida a donde quierasFormato JSONBunyan tiene bunyan-cli para procesar logs

Page 9: Things i wish someone told me about node js

Depuración en general

Generales:perfdtracestrace

Node:node-inspector

memwatch + heapdump + chrome-dev-tools

tick

Page 10: Things i wish someone told me about node js

Callback Hell(Quemaduras de 2º grado)

Page 11: Things i wish someone told me about node js

Callback Hell

Page 12: Things i wish someone told me about node js

Mejor no arder...

Promesas:(bluebird)

Page 13: Things i wish someone told me about node js

¿Brujeria?

● ¿Qué esperan de mí los módulos de promesas?o callbacks(err, res), el error siempre primeroo return del resultadoo throw del error

● ¿Y ya está?o Si, lo básico si.

Page 14: Things i wish someone told me about node js

¿Y… cómo las uso?

1. Adaptar el módulo que quieras usar

2. Usarlo: algo.then….

3. .catch, por si las moscas

Page 15: Things i wish someone told me about node js

The Event Loop(Esas cosas que te vuelan media pierna)

Page 16: Things i wish someone told me about node js

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/Oo libuv por debajo manejando I/O en paralelo

Page 17: Things i wish someone told me about node js

Y todo esto es algo así

Page 18: Things i wish someone told me about node js

Problems

● setTimeout, setImmediate, setIntervalo ú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

Page 19: Things i wish someone told me about node js

Una iteración del event loop

Page 20: Things i wish someone told me about node js

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

Page 21: Things i wish someone told me about node js

Dear CPU...

● Como hemos visto cualquier tipo de códigoo Extensoo Complejoo Pesado

Que no cede el turno de ejecución puede bloquear completamente otros eventos o partes de nuestro código

Page 22: Things i wish someone told me about node js

Dear CPU...

● Soluciones:o clustero child_process o worker-farm

Page 23: Things i wish someone told me about node js

Cluster

● Módulo core de node● Permite levantar procesos clones ( fork )

o Un maestro, cuantos quieras esclavoso El maestro recibe eventos de los otroso Se pueden enviar mensajes entre elloso Comparten puertos pero no memoriao No evita que las peticiones de uno queden en

espera si este se bloquea, pero el resto siguen atendiendo

Page 24: Things i wish someone told me about node js

child_process

● Módulo core de node● Permite levantar procesos cualquiera ( exec )

o El padre recibe ciertos eventos del hijoo Se pueden enviar mensajes entre elloso No comparten nadao Solventa el bloqueo de tu event loop si le envias al

child la computación pesada y esperas su respuestao Puede dar lugar a un número descontrolado de

childs o un child sobrecargado.

Page 25: Things i wish someone told me about node js

worker-farm

● Módulo de npm● child_process automatizado, con esteroides

o Concepto thread poolo Configurable: reintentos, tiempo de espera, número

de workers…o Pierdes el paso de mensajes, pero no tienes que

implementar tu todo lo anterior

Page 26: Things i wish someone told me about node js

Espero que haya menos plomo en vuestros pies ahora.

Gracias

Preguntas:[email protected] @alferpal