things i wish someone told me about node js
TRANSCRIPT
![Page 1: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/1.jpg)
A meetup in Valencia for people that hack JavaScript
![Page 2: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/2.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/3.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/4.jpg)
¿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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/5.jpg)
Las pequeñas cosas(que pican como un corte de papel)
![Page 6: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/6.jpg)
Doble callback
![Page 7: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/7.jpg)
Doble callback: solución
![Page 8: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/8.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/9.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/10.jpg)
Callback Hell(Quemaduras de 2º grado)
![Page 11: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/11.jpg)
Callback Hell
![Page 12: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/12.jpg)
Mejor no arder...
Promesas:(bluebird)
![Page 13: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/13.jpg)
¿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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/14.jpg)
¿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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/15.jpg)
The Event Loop(Esas cosas que te vuelan media pierna)
![Page 16: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/16.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/17.jpg)
Y todo esto es algo así
![Page 18: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/18.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/19.jpg)
Una iteración del event loop
![Page 20: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/20.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/21.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/22.jpg)
Dear CPU...
● Soluciones:o clustero child_process o worker-farm
![Page 23: Things i wish someone told me about node js](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/23.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/24.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062313/55cae537bb61eb46788b4780/html5/thumbnails/25.jpg)
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