JavaScript é interpretado ou compilado em tempo de execução?

Neste artigo você vai aprender se JavaScript é interpretado ou compilado quando o código é executado no navegador, e também a diferença de ambas as abordagens.

Resposta curta: JavaScript é as duas coisas, interpretado e compilado, no mesmo código e em tempo de execução

A MDN define JavaScript como uma linguagem interpretada ou compilada just-in-time (JIT), e é exatamente isso que acontece na prática

No V8, o motor open source de JavaScript e WebAssembly do Google (escrito em C++, usado no Chrome e no Node.js), todo código JS é primeiro compilado para bytecode do Ignition e executado por interpretação

Enquanto interpreta, o motor coleta metadados da execução e usa esse feedback pra recompilar os trechos quentes em código de máquina, o famoso JIT

Hoje o pipeline do V8 tem quatro camadas: Ignition (interpretador), Sparkplug (baseline), Maglev (otimizador intermediário) e TurboFan (otimizador de pico)

Então: a execução começa interpretada e vira código de máquina compilado durante a corrida, e quem decide isso é o motor, não a linguagem

JavaScript é interpretado ou compilado

Fala programador(a), bora aprender mais sobre a forma de execução da linguagem JavaScript!

Interpretação x compilação

Primeiro vamos entender a diferença entre interpretação e compilação

A interpretação tem como objeto transformar o código de uma linguagem em linguagem de máquina para assim ser executado

Podemos dizer que é feita uma tradução do código

Já a linguagem compilada é lida diretamente do seu código fonte e executada, por meio de um compilador

Apesar da linha tênue entre os dois conceitos, as linguagens compiladas acabam sendo mais rapidamente executadas pela ausência da etapa de tradução

E em JavaScript?

A linguagem JavaScript hoje pode ser considerada compilada em tempo de execução, pois foi introduzido aos navegadores a compilação JIT (Just-in-time compilation)

Os compiladores de JavaScript mais conhecidos são o V8 e o Rhino, que transformam o código para C++ e JAVA Bytecode

E estes compiladores suportam e utilizam o JIT nas suas estratégias de compilação

Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

Conclusão

Neste artigo vimos se o código JavaScript é interpretado ou compilado

Como citado no artigo por casa da adição de compiladores como V8 e Rhino, que usam a abordagem JIT

A linguagem JS pode ser considerada compilada, pois é justamente o que este padrão de arquitetura propõe

Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube

Como o V8 executa o seu código, passo a passo:

O V8 é o motor open source de JavaScript e WebAssembly do Google, escrito em C++, e é ele que roda dentro do Chrome e do Node.js

Antes de sair falando de JIT, se liga na ORDEM das coisas, porque é aqui que quase todo mundo se perde

Todo código JavaScript é primeiro compilado para bytecode do Ignition, e esse bytecode é executado por interpretação

Enquanto interpreta, o motor vai coletando metadados da execução: o que é chamado toda hora, que tipo de valor aparece em cada ponto, e por aí vai

Esse feedback alimenta o compilador otimizador, que recompila os trechos quentes para código de máquina

Ou seja, o V8 usa compilação JIT para código nativo imediatamente antes da execução, com um compilador baseline rápido e depois recompilação dinâmica por um otimizador mais avançado

Então não é interpretado OU compilado: é interpretado primeiro e compilado depois, no meio da corrida 🙂

As quatro camadas do V8: Ignition, Sparkplug, Maglev e TurboFan

O pipeline atual do V8 tem quatro camadas de compilação, e cada uma existe por um motivo diferente

Se você já dirigiu carro com câmbio manual, é a mesma ideia: começa na marcha leve pra sair do lugar e vai subindo conforme ganha velocidade

  1. Ignition: o interpretador, roda o bytecode e coleta feedback
  1. Sparkplug: o compilador não otimizador (baseline), que chegou no V8 v9.1 e foi liberado no Chrome 91. Ele compila a partir do bytecode já gerado, e não do código fonte, e trouxe ganho de 5% a 15% em benchmarks de mundo real
  1. Maglev: o otimizador intermediário, introduzido no Chrome M117 e disponível no Chrome desktop. Ele gera código cerca de 20x mais devagar que o Sparkplug, mas de 10x a 100x mais rápido que o TurboFan, e rendeu +8,2% no JetStream, +6% no Speedometer e cerca de 10% de economia de energia no Speedometer
  1. TurboFan: o otimizador de pico, o mais caro de rodar e o que gera o código mais rápido

Massa perceber que o motor não escolhe UMA estratégia: ele escolhe a estratégia certa pra cada pedaço do seu código, enquanto o site já está rodando

E nos outros navegadores, funciona igual?

A arquitetura em camadas não é exclusividade do Chrome, beleza?

No Firefox, o SpiderMonkey sobe de camada conforme o script esquenta: Baseline Interpreter, depois Baseline JIT e no topo o WarpMonkey, que substituiu o IonMonkey e trabalha com inlining e especialização. O Warp foi entregue pela Mozilla no Firefox 83, construindo as otimizações em cima dos dados de Inline Cache

No Safari, o JavaScriptCore tem quatro camadas de execução: LLInt (interpretador de bytecode), Baseline JIT, DFG JIT (otimizador de baixa latência) e FTL JIT (otimizador de alta vazão)

E fora do navegador tem caso curioso: o Bun é um runtime de JavaScript movido pelo JavaScriptCore, o motor do Safari, e não pelo V8. Ele até expõe o módulo bun:jsc com APIs de baixo nível do motor

Ou seja, o mesmo código JS que você escreve pode passar por pipelines bem diferentes dependendo de onde roda

Dá pra rodar JavaScript sem JIT?

Dá sim, e esse é o melhor jeito de provar que a interpretação nunca sumiu da jogada

O V8 pode rodar em modo sem JIT: com a flag –jitless não há alocação de memória executável em tempo de execução, e todo o código JavaScript do usuário roda no interpretador Ignition

E isso não é só brincadeira de quem mexe no motor: o Chrome expõe um controle de otimização de JavaScript pro usuário comum, em Configurações > Privacidade e segurança > Segurança > Gerenciar otimização e segurança do JavaScript

Com o Programa de Proteção Avançada do Google ativado, as otimizações de JavaScript ficam desligadas, tanto no desktop quanto no Android

Tome cuidado ao tirar conclusão apressada aqui: menos otimização é uma troca entre superfície de ataque e desempenho, não um "modo turbo" escondido

Onde o Rhino entra nessa história:

O Rhino é uma implementação open source de JavaScript escrita inteiramente em Java, mantida no repositório github.com/mozilla/rhino

E ele é o exemplo mais didático do assunto deste artigo, porque nele os dois modos são uma configuração explícita

Com optimization level -1 ele roda em modo interpretado, sem gerar arquivos .class

Com níveis de 0 a 9 ele compila para bytecode Java

Mesma linguagem, mesmo código, e a resposta pra "interpretado ou compilado?" muda conforme o nível que tu escolhe

A versão estável mais recente é a 1.9.1, publicada em 15 de fevereiro de 2026

Por que a resposta certa é "depende do motor":

A especificação da linguagem descreve o comportamento do JavaScript, não obriga ninguém a interpretar nem a compilar

A edição mais recente é o ECMAScript 2026 (ECMA-262, 17ª edição), aprovada pela Ecma International em 30 de junho de 2026, e o texto oficial fica em tc39.es/ecma262/2026/

Quem decide a estratégia é a implementação: V8, SpiderMonkey, JavaScriptCore, Rhino, cada um com o seu pipeline

Por isso a MDN define JavaScript como uma linguagem interpretada ou compilada just-in-time, com as duas possibilidades na mesma frase

E fora do navegador vale a mesma lógica: o Node.js 26.0.0, lançado em 5 de maio de 2026, traz o V8 14.6.202.33, vindo do Chromium 146. Hoje o Node.js 24 é o Active LTS, o 22 está em manutenção e o 26 é a linha Current, com entrada em LTS prevista para outubro de 2026

Mesmo motor do Chrome, mesma história de interpretar e compilar 😀

Um adendo pessoal antes de fechar, porque essa pergunta quase sempre vem de quem está começando

Dominar é uma palavra muito forte

O que acontece com programador em nível alto é se sentir confortável com a linguagem, e não guardar tudo de cabeça

Você não precisa decorar as quatro camadas do V8 pra escrever bom JavaScript

O ponto ideal é: apareceu o problema, eu sei com qual recurso resolver, e se travar eu abro a documentação, pesquiso, pergunto pra IA quando a dúvida for cabulosa

Saber que o motor interpreta primeiro e otimiza depois muda o jeito de você ler um gargalo, e isso vale mais que decorar nome de compilador

O que ainda falta medir por aqui, e eu prefiro não chutar: comparar o mesmo script com as otimizações ligadas e no modo sem JIT do V8, no meu ambiente, pra falar de diferença com número na mão. Quando eu rodar isso, atualizo o post =)

Perguntas frequentes

JavaScript é interpretado ou compilado?

Os dois, em momentos diferentes da mesma execução

A MDN descreve JavaScript como linguagem interpretada ou compilada just-in-time

No V8, o código vira bytecode do Ignition e roda interpretado, e as partes quentes são recompiladas para código de máquina pelo compilador otimizador

O que é compilação JIT?

JIT (Just-In-Time) é a tradução de uma representação intermediária ou de uma linguagem de alto nível para código de máquina em tempo de execução, e não antes da execução

Na prática, ele compila em runtime as partes quentes do código (os hot spots), combinando benefícios da interpretação e da compilação antecipada (AOT)

Quais são as camadas de compilação do V8?

São quatro: Ignition, o interpretador de bytecode, Sparkplug, o compilador baseline, Maglev, o otimizador intermediário, e TurboFan, o otimizador de pico

O Sparkplug chegou no V8 v9.1 e foi liberado no Chrome 91, compilando a partir do bytecode já gerado, com ganho de 5% a 15% em benchmarks de mundo real

O Maglev foi introduzido no Chrome M117 e gera código cerca de 20x mais devagar que o Sparkplug, porém de 10x a 100x mais rápido que o TurboFan

Todo navegador executa JavaScript da mesma forma?

Não, mas a ideia de camadas se repete

O SpiderMonkey, do Firefox, sobe de camada conforme o script esquenta: Baseline Interpreter, Baseline JIT e WarpMonkey, que substituiu o IonMonkey e usa inlining e especialização. O Warp foi entregue no Firefox 83

O JavaScriptCore, do Safari, tem LLInt (interpretador de bytecode), Baseline JIT, DFG JIT (otimizador de baixa latência) e FTL JIT (otimizador de alta vazão)

Dá pra rodar JavaScript sem JIT?

O V8 tem a flag –jitless: nesse modo não há alocação de memória executável em tempo de execução e todo o código JavaScript do usuário roda no interpretador Ignition

No lado do usuário, o Chrome expõe o controle em Configurações > Privacidade e segurança > Segurança > Gerenciar otimização e segurança do JavaScript, e com o Programa de Proteção Avançada do Google ativado as otimizações de JavaScript ficam desligadas, no desktop e no Android

O Node.js usa o mesmo motor do Chrome?

Usa o V8, sim

O Node.js 26.0.0, lançado em 5 de maio de 2026, traz o V8 14.6.202.33, vindo do Chromium 146

Hoje o Node.js 24 é o Active LTS, o 22 está em manutenção e o 26 é a linha Current, com entrada em LTS prevista para outubro de 2026

Por que o Rhino é um bom exemplo nessa discussão?

Porque nele a escolha é explícita

O Rhino é uma implementação open source de JavaScript escrita inteiramente em Java, mantida em github.com/mozilla/rhino, com versão estável 1.9.1 publicada em 15 de fevereiro de 2026

Com optimization level -1 ele roda em modo interpretado, sem gerar arquivos .class, e nos níveis de 0 a 9 ele compila para bytecode Java

A especificação do JavaScript diz se a linguagem é interpretada ou compilada?

Não

A especificação define o comportamento da linguagem, e a estratégia de execução fica com cada implementação

A edição vigente é o ECMAScript 2026 (ECMA-262, 17ª edição), aprovada pela Ecma International em 30 de junho de 2026, com o texto oficial publicado pelo TC39 em tc39.es/ecma262/2026/

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares