Firefox 70 chegará com um interpretador JavaScript aprimorado

É do conhecimento geral que aplicativos Web modernos executam muito mais código JavaScript do que alguns anos atrás. Embora os compiladores tenham seguido rapidamente a tendência e tornado o JavaScript eficiente. No entanto, o Firefox 70 chegará com um interpretador JavaScript aprimorado para lidar com essa carga de trabalho ainda melhor.

Para fazer isso, a Mozilla desenvolveu e adicionou um novo interpretador de código de bytes JavaScript ao seu mecanismo de renderização JavaScript incorporado no Firefox 70.

Para atingir esse objetivo, a Mozilla explica que, nos modernos mecanismos JavaScript, cada função é inicialmente executada em um interpretador de código.

Funções que são chamadas de muito são compiladas no código de máquina nativo. Isso é chamado de compilação JIT ou compilação em tempo real. Quanto ao Firefox, ele também inclui um interpretador de código JavaScript escrito em C++ e vários níveis de compilação JIT.

Deve-se notar que, quando uma função que já está sendo compilada é chamada com um novo tipo de argumento, o código da função pode ser “desotimizado” e descartado. Nesse caso, a execução continua no código base até a próxima compilação de íons.

Embora esse processo de interpretação do código JavaScript tenha funcionado muito bem até agora, a equipe do Firefox explica que encontrou alguns problemas com a primeira parte que consiste no interpretador C++ e no compilador base JIT.

De fato, alguns aplicativos modernos da web, como o Google Docs ou o Gmail, executam tanto JavaScript que o compilador base e até o compilador JIT podem gastar muito tempo tentando compilar milhares de funções.

Além disso, o interpretador C++ tem sido muito lento e não coleta informações de tipo, o que atrasa a compilação básica. Uma solução seria removê-lo do encadeamento, mas isso seria um risco de desempenho.

O novo interpretador JavaScript do Firefox 70

Para resolver esses problemas, o pessoal da Mozilla comenta que:

O interpretador base está entre o interpretador C++ e o compilador JIT base e contém elementos de ambos os níveis.

Executar todas as instruções de código de bytes com um loop de intérprete fixo (como o interpretador C++) e usar técnicas de cache online para melhorar o desempenho e coletar informações de tipo (como faz o JIT básico).

Além disso, como os desenvolvedores do Firefox queriam que o interpretador de base usasse exatamente os mesmos caches online e as mesmas informações do JIT, uma nova estrutura de dados chamada JitScript foi adicionada.

O JitScript contém todas as informações de tipo e estruturas de dados de armazenamento em cache online usadas pelos intérpretes de base e pelo compilador JIT.

Com essas novas implementações, os dados básicos do compilador para uma função agora estão apenas no código da máquina. A partir daí, todas as informações em cache e os dados de criação de perfil foram movidos para o JitScript.

No entanto, como o interpretador base e o compilador JIT são idênticos, grande parte do código gerado também pode ser compartilhado.

Para fazer isso, uma classe base chamada BaselineCodeGen foi criada com outras 2 classes derivadas. O compilador base usa a primeira classe BalineCompiler para compilar o código de bytes de um script de código de máquina.

A segunda classe BaselineInterpreterGenerator é usada para gerar o código para o interpretador base. E com a classe BaselineInterpreterGenerator, a equipe do Firefox conseguiu criar o interpretador base.

Enfim, o Firefox 70 com interpretador Javascript aprimorado estará disponível para o mês de outubro. Para mais informações, acesse esse link.

Fonte: Ubunlog / Mozilla

Share This Article
Os artigos vinculados à este usuário são de terceiros. A informação aqui contida não foi elaborada originalmente por nós do SempreUpdate. Mas, publicamos conforme solicitação, envio ou recomendações do próprio autor, assessoria e outros departamentos comerciais ou não comerciais.
Sair da versão mobile