Henrique Rotava
Especificação de linguagem de programação baseada em scripts
Padronizada pela Ecma Internacional
Versões anuais
A mais relevante foi a 6 (2015)
Linguagem de programação
Interpretado
Síncrono
Single Thread
Suporta programação orientada a eventos
Interpreta e executa código JavaScript
Cada browser tem sua implementação
Também chamada de máquina virtual
Memory Heap
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...");
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
Memory Heap
Call Stack
DOM (document)
AJAX (XMLHttpRequest)
Timeout (setTimeout)
onClick
onLoad
callbacks
Callback Queue
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
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
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
APP
API
NODE
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)