Há alguns anos o JavaScript era uma linguagem interpretada, porém, hoje, ela é compilada em tempo de execução através de um recurso chamado JIT (just-in-time) compilation. A leitura do JavaScript é realizada por engines, que são implementadas no desenvolvimento do Navegador, e elas possuem uma série de recursos, como a compilação JIT, para que isso seja feito de maneira eficiente.

A imagem abaixo exemplifica como ocorre esse processo.


Primeiramente, o navegador identifica o trecho em JavaScript e manda para a engine executá-lo, ela por sua vez manda o Source code para o Parser. Este pega o JavaScript e gera uma Abstract Syntax Tree (AST) dele, por exemplo:

    //Código para atribuir à variável r o valor do próprio r vezes o valor antecessor de n.

    var r = r * (n - 1);

O script acima teria como resultado do Parser, algo que pode ser representado visualmente assim:

astdlrtest2.png

Após isso o AST é transformado em um bytecode para ser lido pelo interpretador. Na interpretação entra a JIT, no qual os códigos são transformados em linguagem de máquina e já vão sendo executados. Os códigos que aparecem com frequência são armazenados na memoria para não terem que ser recompilados e quando não são mais utilizados com frequência o Garbage Collector apaga eles da memória. Isso deixa um pouco mais claro o porquê de alguns navegadores consumirem mais memória que outros, pois depende muito da implementação da engine.
Essa é uma visão geral de como funciona as engines, ou seja, esse processo não é fixo, podendo variar. Alguns exemplos de engines são:

  • Chackra (Internet Explorer),
  • V8 (Google Chrome e Opera)
  • SpiderMonkey (Firefox) 
  • Nitro (Safari).

Os navegadores seguem contam com o padrão do ECMAScript, o Ecma-262 para fazer a leitura de códigos JavaScript e com auxílio de sistemas como BOM (Browser Object Model) e DOM (Document Object Model), o primeiro é responsável pela interação do JavaScript com elementos próprios do navegador e o segundo com elementos próprios do HTML, para que o usuário tenha uma ótima experiência ao navegar em páginas desenvolvidas com JavaScript.

 Se você estiver seguindo a cronologia de estudos do blog, esse conceito ficará mais claro em postagens mais adiante.