O que são engines (motores) do JavaScript, também chamados de engines de TypeScript, e como funcionam. Entenda o funcionamento do Just In Time Compilation e, por fim, o que são e como funcionam os runtimes.
que analisam e executam código escrito em JS; • Converte o código JS para código de máquina que é interpretado pelo hardware; • Inicialmente eram apenas interpretadores (conversores), mas hoje têm performance melhorada pelo JIT; • Geralmente são desenvolvidos e mantidos pelos grandes browsers; • EcmaScript Engine também é um nome correto.
lexical (escrita) no código JS, verifica erros e quebra em ASTs; • ASTs (Abstract Syntax Tree): uma árvore de comandos baseado no código, de forma que possa ser compreendido pelo Interpreter (playground AST); • Interpreter: realiza as primeiras interpretações do código a nível de máquina, lendo os ASTs gerados.
análise do motor para identificar que partes do código podem ser otimizadas para melhor performance; • Compiler: o compilador por fim gera o código de máquina que será executado pelo hardware. É aqui também que a engine realiza o JIT para garantir melhor performance.
lista pouco mais de 40 que existem ou existiram no mercado; • Mas, como desenvolvedores FrontEnd, esses são os principais motores que devemos conhecer.
vimos); • Compilation: transforma os ASTs em código de máquina; • Execution: execução do código; • Optimization: durante a execução, a engine verifica se há hot paths (trechos com chamadas frequentes) e os optimiza, injetando o novo código na compilação. Dessa forma, o processo todo é uma mistura de compilação AOT (ahead of time) e JIT. Fonte: https://www.freecodecamp.org/news/javascript-engine-and-runtime- explained/
hot path/hot function e a engine vai otimizá-la, por exemplo, removendo verificações de tipagem desnecessárias, garantindo uma execução mais rápida; • Já no segundo caso, a engine pode aplicar uma deotimização (deoptmization) pois há um tipo diferente sendo informado para a função soma, portanto se faz necessário que exista as verificações para evitar erros. Fonte: ChatGPT
como o ambiente que une tudo o que é necessário para a execução de um código JS; • Nos browsers, por exemplo, o runtime une, além do JS em si, as Web APIs e a fila de callbacks; • const mapped = array.map(…) <= JavaScript • document.getElementById(…) <= Não JavaScript, mas sim Web APIs (runtime) • O mesmo se aplica para runtimes server- side, como o site do NodeJS afirma: "It is independent from the underlying JavaScript runtime (for example, V8) and is maintained as part of Node.js itself" (ref.) Fonte: https://www.freecodecamp.org/news/javascript-engine- and-runtime-explained/
mais popular é o NodeJS; • O Deno foi lançado oficialmente em 2020 pelo mesmo criador do NodeJS; • Curiosidade: vídeo do criador dizendo o que se arrepende do NodeJS.
interpretam, compilam e otimizam código JS para código de máquina; • Os mais comuns são: V8, SpiderMonkey e JavaScriptCore; • Os runtimes são o ambiente onde os motores funcionarão, juntamente com outras APIs e fila de execução; • Os mais comuns são: browsers em geral (client side) e NodeJS, DenoJS, Bun (server side).