Agora, engenheiros do Cloudflare, Mozilla, Facebook e Bloomberg começaram a trabalhar em um novo projeto chamado ‘BinaryAST’, para acelerar a entrega e processamento de código JavaScript para abrir sites em navegadores web.
O BinaryAST leva a fase de análise para o lado do servidor e entrega uma árvore de sintaxe gerada abstrata (AST).
Ao receber o BinaryAST, o navegador pode ir imediatamente para o estágio de compilação, sem passar pela análise do código-fonte do JavaScript.
Uma implementação de referência preparada sob as licenças do MIT foi preparada para testes. Os componentes do Node.js que são usados ​​para analisar o código para otimizar e gerar o AST, estão escritos em Rust.
O codificador em BinaryAST pode ser usado tanto no nível do kit de ferramentas do site final quanto para empacotar scripts de sites externos no lado do proxy ou na rede de entrega de conteúdo.
No momento, o processo de normalização BinaryAST pelo grupo de trabalho ECMA TC39 já começou, após o qual o formato pode coexistir com os métodos existentes de compressão do conteúdo entregue como gzip e Brotli.
Uma quantidade considerável de tempo durante o processamento de JavaScript leva o estágio de carregar e analisar o código.
Levando em conta o fato de que o volume de JavaScript carregado em muitos sites populares é próximo a 10 MB (por exemplo, para LinkedIn – 7,2 MB, Facebook – 7,1 MB, Gmail – 3,9 MB), o processamento inicial de JavaScript introduz um atraso significativo.
O estágio de análise do lado do navegador também é retardado devido à incapacidade de criar um AST enquanto o código está sendo carregado (o navegador tem que esperar por blocos de código para carregar, por exemplo, o fim das funções, para obter as informações faltantes para analisar os elementos atuais).
Parcialmente, tentamos resolver o problema distribuindo o código de maneira minimizada e compactada, bem como o armazenamento em cache gerado pelo navegador.
Enquanto em sites modernos, o código é atualizado com bastante frequência, portanto, o armazenamento em cache só resolve parcialmente o problema.
A solução pode ser o WebAssembly, mas requer o uso explícito do script no código e não está bem adaptado para acelerar o processamento do código JavaScript existente.
Outra opção é entregar o código compilado já feito em vez de scripts JavaScript, mas os desenvolvedores do mecanismo do navegador se opõem a ele, já que o código de terceiros é difícil de verificar, seu processamento direto pode levar à separação da web , surgem ameaças adicionais à segurança.
O BinaryAST permite que você se integre ao modelo atual de desenvolvimento e entrega de código sem criar um novo código de byte e sem alterar a linguagem JavaScript.
O tamanho dos dados no formato BinaryAST é comparável ao código JavaScript compactado e reduzido, e a velocidade de processamento devido à exclusão da fase de análise de origem está aumentando significativamente.
Além disso, o formato permite compilar em bytecode como carga do BinaryAST, sem esperar que todos os dados sejam concluídos.
Um recurso do BinaryAST também é a capacidade de restaurar JavaScript legível, não um para um que corresponda à versão original, mas é semanticamente equivalente e inclui os mesmos nomes e funções de variáveis ​​(o BinaryAST armazena nomes, mas não salva informações sobre posições no código, o formato e os comentários).
O outro lado da moeda é o aparecimento de novos vetores para ataques, mas, segundo os desenvolvedores, eles são significativamente menores e mais controláveis ​​do que com o uso de alternativas, como a distribuição de códigos de bytes.