O que, como e por que motor JavaScript?
Olá amigos leitores, Este artigo é para aqueles que estão curiosos sobre por que precisamos de uma Engine, como ela funciona e o que é uma engine JS !!!? Assim, este artigo está dividido em seções. Por que o que e como o JS funciona.
Isenção de responsabilidade aqui - não examinaremos o âmago da questão (pilha, heap de memória, etc.). O artigo focará apenas no JS Engine. Eu tentei tornar este artigo interativo, não como outros artigos maçantes. para que você possa entender e obter tudo o que este artigo tem a oferecer.
vamos levantar as questões, não vamos?
O que e por que JS Engine?
Um mecanismo JavaScript é um componente de software que executa o código JavaScript . Os primeiros mecanismos JavaScript eram meros interpretadores , mas todos os mecanismos modernos relevantes usam…. etc. (segundo a Wikipédia)
Vamos quebrar a monotonia: ao invés de entender a linha acima, vamos entender isso:
digamos, suponha que haja duas pessoas, uma francesa e outra alemã✈️, ambas precisam conversar, como fariam? claro com a ajuda de algum tradutor/intérprete.
O mesmo vale para o computador e seu código , ele precisa de um mecanismo/intermediário, pois seu computador não consegue entender o código, em termos técnicos, o computador não entende o source code, ele entende o machine code.
significa que é isso que você entende:
'Olá!'
e é isso que seu computador entende
' 01001000 01100101 01101100 01101100 01101111 00100001'
Código Fonte ➡️⚙️➡️ Código Máquina
a maneira como ele converte o código determina o tipo. como interpreted, compilede JIT compiled.
você já deve ter ouvido falar sobre a linguagem compilada, interpretada, e o que é JIT compilado????
e acredito que muita gente pensa que javascript é linguagem interpretada. deixe-me dizer-lhe que não é❌. “ JS é uma linguagem compilada JIT (Just In Time)”.
vamos entender cada maneira.
- Compilação: na compilação, todo o código-fonte é convertido em código de máquina de uma só vez, o que tem melhor desempenho. a compilação é mais rápida porque o código fonte já foi compilado, estamos apenas executando. então já teremos código de byte/código de máquina pronto.
- Intérprete: faz o mesmo trabalho, mas linha por linha, não tudo de uma vez. o que o torna 10 vezes mais lento que os compiladores. o código é lido e executado simultaneamente, JS costumava ser uma linguagem puramente interpretada. o que tornou o JS Muito Muito Muito mais lento!!.
- Portanto, para evitar a execução lenta do JS moderno, use a abordagem de compilação JIT (just in time), onde o código-fonte é convertido em código de máquina, mas, ao contrário da compilação, não cria o arquivo portátil. e a execução acontece imediatamente. isso significa que o mecanismo JS moderno usa ambos.
- Interpretação - você lê uma linha e traduz uma linha, novamente a segunda linha - traduz uma linha. o que leva muito tempo,
- Compilação - Você lê o livro inteiro - faça sua própria versão do livro em hindi e dê a seu amigo para ler. assim, mais tarde, sempre que precisar explicar a alguém, você poderá fazê-lo. que é uma maneira mais rápida.
- Compilação JIT — Você lê o livro, em vez de fazer uma cópia do livro. você explica ao seu amigo, então não há necessidade de uma cópia do livro. que é a maneira mais eficiente e rápida.
É assim que o código JS é executado no mecanismo, que deve passar por essas etapas. para converter o código-fonte em código de máquina.
Vamos entender um por um:
- O primeiro passo seria “codificar” pelo amor de Deus!, XD!
- Análise: análise irá converter o código-fonte em um token (isso significa que seu código será como const, message, =, 'hello'. estes são 4 tokens) então o token será convertido em uma estrutura de dados chamada Árvore de sintaxe abstrata (AST ) , que se parece com isso
Esta é apenas uma linha de código, imagine como seu programa seria extenso. você deve estar se perguntando por que precisamos analisar o AST. não podemos simplesmente compilar o que temos diretamente?
Então, deixe-me dizer que o AST desempenha um papel crítico na validação da correção✅ e do uso adequado do programa e da linguagem. (por exemplo , linting usa AST, para aqueles que não sabem sobre lint. ele verifica seu código e mostra erros, não é legal ), e AST também é usado em outros lugares como babel, webpack, minificadores e marcadores de sintaxe.
Se você quiser ver a aparência do AST, verifique este site. ou consulte este exemplo.
3. Compilação: Converte ⚙️ AST em código de máquina/código binário, agora o código foi convertido em código binário (0, 1), que nosso computador pode entender.
4. Execução: Acontece na pilha de chamadas (que é outro tópico interessante a ser abordado, mas não o abordaremos aqui). a história não termina aqui,
5. Otimização: o mecanismo JS moderno otimiza continuamente o código. Por que o JIT é rápido? porque ele criará a versão não otimizada do código de máquina primeiro, pelo menos a execução ocorre o mais rápido possível e, em segundo plano, haverá otimização contínua ♻️, que otimizará o código e o código não otimizado anterior será substituído por um novo otimizados.
Conclusão :
Por que precisamos do motor? ➡ Porque o nosso código (código fonte) não pode ser entendido pelo computador, ele só entende o código binário (0,1)/código da máquina. então precisamos de algum intermediário para nossa conversão (é isso que nosso Engine faz),
O que o mecanismo faz ➡ Código-fonte ➡️⚙️➡️ Código de máquina
Como faz o motor ➡ Faz em quatro etapas
Código Fonte ➡️⚙️➡️ ➡ AST (Abstract Syntax Tree ) ➡ ➡️⚙️➡️ ➡ Código binário/código de máquina ➡ ➡️⚙️➡️ ➡ Execução na pilha de chamadas ➡ ➡️⚙️➡️ ➡ Otimização ♻️





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)