Web Assembly
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
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
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
Como JIT funciona?
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!
Web Assembly - O próximo salto de perfomance
“Web Assembly will change the way we think of Web
Apps”. Jay Phelps. Software Engineer on Netflix.
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
Etapas no browser
● O bundle menor, decodificação antes mesmo do JS
parsear, otimizações na pré-compilação e compilação em
stream
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)
Futuro?
● Binarios Everywhere
● Utilização para Jogos na web
● Mais e mais linguagens compilando para WASM
● Garbage Collector
● Wasi

Web assembly

  • 1.
  • 2.
    JavaScript ● Criado porBrendan 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
  • 5.
  • 6.
    JavaScript ● Criado porBrendan 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!
  • 7.
    Web Assembly -O próximo salto de perfomance
  • 8.
    “Web Assembly willchange the way we think of Web Apps”. Jay Phelps. Software Engineer on Netflix.
  • 9.
    Web Assembly oque é?? ● 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 serde 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

  • #5 4 - Basicamente a versão otimizada é jogada fora e o trecho volta a ser executado com a versão baseline ou até interpretada.
  • #11 Náo tem Garbage Collector ainda
  • #12 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.