things i wish someone told me about node js

Post on 12-Aug-2015

385 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Espero que haya menos plomo en vuestros pies ahora.

Gracias

Preguntas:alferpal@gmail.com @alferpal

top related