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

Empilha as chamadas de função

Desempilha quando existe um return

Loupe: http://latentflip.com/loupe

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)

Made with Slides.com