Como o Node.js funciona?

Henrique Rotava
ECMAScript
Especificação de linguagem de programação baseada em scripts
Padronizada pela Ecma Internacional
Versões anuais
A mais relevante foi a 6 (2015)

JavaScript
Linguagem de programação
Interpretado
Síncrono
Single Thread
Suporta programação orientada a eventos

Engine JavaScript
Interpreta e executa código JavaScript
Cada browser tem sua implementação
Também chamada de máquina virtual

Memory Heap
Call Stack
Call stack
function multiply(x, y) {
return x + y;
}
function square(x) {
return multiply(x, x);
}
function calculate() {
const result = square(5);
console.log(result);
}
calculate();
$.on('button', 'click', function onClick() {
calculate();
});
setTimeout(function timeout() {
console.log("Time out!");
}, 5000);
console.log("Waiting timer...");
V8 Engine
Engine JavaScript do Google/Chrome
Compila JIT e otimiza o código
Gera bytecode executável pela máquina
Desenvolvida em C++
Segue a especificação ECMAScript
Execução síncrona

JavaScript no navegador

Memory Heap
Call Stack
DOM (document)
AJAX (XMLHttpRequest)
Timeout (setTimeout)
onClick
onLoad
callbacks
Callback Queue

Event loop
Event loop
Ele que faz a aplicação funcionar
É um loop infinito
Ele executa o que existir na call stack
Depois verifica a event queue por callbacks prontas
Possui passos definidos

libuv

Foco em I/O assíncrono
Multiplataforma (essa é a parte incrível)
Desenvolvida em C++
Event loop
Thread pool
Comunicação de rede
Manipulação de arquivos
Usada pelo Node, Rust, Julia e outros
Node
Runtime JavaScript orientada a eventos assíncronos
Desenhado para construir aplicações de rede altamente escaláveis
Possui baixo consumo de memória por ser single thread e evitar concorrência

Runtime Node

APP



API
NODE

Considerações finais
JavaScript se torna uma simples interface para C++
Node é um wrraper para V8 e libuv
Timeouts podem não executar no tempo definido
Nunca bloqueie o event loop
É possível usar Node com Chakra (Microsoft Edge)

Como o Node.js funciona
By Henrique Rotava
Como o Node.js funciona
- 455