2. JavaScript
● Criado por Brendan Eich em 1995, feito em 10 dias
● Objetivo primário: Controlar o DOM e trazer dinamicidade a páginas até
então estáticas
● Interpretado - erros em runtime
● Preocupação com perfomance: Nenhuma
● Feito em 10 dias
3. V8 - Google
● Surgimento do Ajax
○ Necessidade do código ser processado no browser
○ Aplicações mais dinâmicas (gmail. google maps e afins)
○ Necessidade de perfomance
● Surgimento da Engine V8
● JIT - Just in Time Compilation - Compilação de código JavaScript para
Bytecode
4. Como JIT/V8 funciona?
● Após o JavaScript ser carregado ele é transformado em uma estrutura em
árvore chamada Abstract Syntax Tree ou AST
● Se um trecho do código for interpretado muitas vezes ele se torna warm. Ele
passa pelo baseline compiler que, dependendo do SO/plataforma, gera uma
versão compilada do trecho com uma certa otimização, reduzindo o tempo de
interpretação.
● Se esse código warm for executado muitas vezes ele se torna hot e entra em
ação o optimizer compiler, usando algumas coisas como premissa
● Se uma dessas premissas for quebradas iniciasse a fase de deoptimization
● Temos ainda um garbage colector para limpar a memória quando algo não é
mais usado
6. JavaScript
● Criado por Brendan Eich em 1995, feito em 10 dias
● Objetivo primário: Controlar o DOM e trazer dinamicidade a páginas até
então estáticas. Fazer aplicações robustas e rodar em qualquer lugar
● Interpretado. Compilado em tempo real
● Preocupação com perfomance: Muita!
8. “Web Assembly will change the way we think of Web
Apps”. Jay Phelps. Software Engineer on Netflix.
9. Web Assembly o que é??
● WebAssembly (WASM) é um Compiler Target (o código
que o compilador gera) de formato binário, que roda
códigos como C, C++ e Rust no navegador com uma
performance bem próxima a de um código nativo.
● Permite rodar esses códigos de outras linguagens ao lado
de JavaScript - inclusive compartilhando funcionalidade
10. Etapas no browser
● O bundle menor, decodificação antes mesmo do JS
parsear, otimizações na pré-compilação e compilação em
stream
11. Resumo
● Pode ser de 10% a 800% mais rápido que um código JS - Depende da
engine que irá rodar
● Podemos importar código WASM no NodeJS ou Browser
● Roda apenas 20% mais lento que código nativo.
● Compartilhamento de código entre JavaScript e outras linguagens
● Acesso as APIs Web disponibilizadas pelo environment (browser ou Node)
12. Futuro?
● Binarios Everywhere
● Utilização para Jogos na web
● Mais e mais linguagens compilando para WASM
● Garbage Collector
● Wasi
Notas do Editor
4 - Basicamente a versão otimizada é jogada fora e o trecho volta a ser executado com a versão baseline ou até interpretada.
Náo tem Garbage Collector ainda
os 20% é importante pois ele roda em uma sandbox, que implementa uma série de restrições e medidas de segurança forçadas pelo browser.