Things i wish someone told me about node js
-
Upload
alexandre-ferrando -
Category
Software
-
view
382 -
download
2
Transcript of Things i wish someone told me about node js
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 DeveloperUsando 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
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
Depuración en general
Generales:perfdtracestrace
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 primeroo return del resultadoo 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/Oo libuv por debajo manejando I/O en paralelo
Y todo esto es algo así
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
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ódigoo Extensoo Complejoo Pesado
Que no cede el turno de ejecución puede bloquear completamente otros eventos o partes de nuestro código
Dear CPU...
● Soluciones:o clustero child_process o worker-farm
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
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.
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