Cloudflare, Mozilla e Facebook desenvolven BinaryAST para acelerar a carga de JavaScript

Enxeñeiros de Cloudflare, Mozilla, Facebook e Bloomberg ofrecido novo formato binaryAST para acelerar a entrega e procesamento de código JavaScript ao abrir sitios nun navegador. BinaryAST move a fase de análise ao lado do servidor e ofrece unha árbore de sintaxe abstracta xa xerada (AST). Tras recibir un BinaryAST, o navegador pode pasar inmediatamente á fase de compilación, evitando analizar o código fonte de JavaScript.

Para probas preparado implementación de referencia proporcionada bajo la licencia MIT. Os compoñentes de Node.js úsanse para analizar e o código para a optimización e a xeración de AST está escrito en Rust. Soporte do lado do navegador
BinaryAST xa está dispoñible en asemblea nocturna Firefox. O codificador en BinaryAST pódese usar tanto no nivel de ferramentas do sitio final como para empaquetar scripts de sitios externos ao lado dun proxy ou da rede de entrega de contido. Actualmente, o proceso de estandarización de BinaryAST polo grupo de traballo xa comezou ECMA TC39, despois do cal o formato poderá coexistir cos métodos de compresión de contido existentes, como gzip e brotli.

Cloudflare, Mozilla e Facebook desenvolven BinaryAST para acelerar a carga de JavaScript

Cloudflare, Mozilla e Facebook desenvolven BinaryAST para acelerar a carga de JavaScript

Ao procesar JavaScript, pásase unha cantidade significativa de tempo na fase de carga e análise do código. Tendo en conta que o volume de JavaScript descargado en moitos sitios populares é próximo aos 10 MB (por exemplo, para LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), o procesamento inicial de JavaScript introduce un atraso significativo. A fase de análise no lado do navegador tamén se ralentiza debido á incapacidade de construír completamente o AST sobre a marcha mentres se carga o código (o navegador ten que esperar a que os bloques de código completen a carga, como o final das funcións, para obter a información que falta para analizar os elementos actuais).

Están tentando resolver parcialmente o problema distribuíndo o código nunha forma minimizada e comprimida, así como almacenando en caché o bytecode xerado polo navegador. Nos sitios modernos, o código actualízase con bastante frecuencia, polo que o caché só soluciona parcialmente o problema. WebAssembly podería ser unha solución, pero require escribir explícitamente o código e non é moi axeitado para acelerar o procesamento do código JavaScript existente.

Outra opción é entregar un bytecode compilado listo en lugar de scripts JavaScript, pero os desenvolvedores de motores de navegador están en contra porque o bytecode de terceiros é difícil de verificar, o seu procesamento directo pode levar á estratificación web, a que xorden riscos adicionais de seguridade e o desenvolvemento de é necesario un formato de bytecode universal.

BinaryAST permíteche encaixar no teu modelo de desenvolvemento e entrega de código actual sen crear un novo bytecode nin cambiar a linguaxe JavaScript. O tamaño dos datos no formato BinaryAST é comparable ao código JavaScript minificado comprimido e a velocidade de procesamento ao eliminar a fase de análise do texto fonte aumenta notablemente. Ademais, o formato permite a compilación de bytecode a medida que se carga BinaryAST, sen esperar a que se completen todos os datos. Ademais, a análise no lado do servidor permítelle excluír funcións non utilizadas e código innecesario da representación de BinaryAST devolto, o que, ao analizar no lado do navegador, perde tempo tanto analizando como transmitindo tráfico innecesario.

Unha característica de BinaryAST tamén é a capacidade de restaurar JavaScript lexible que non é exactamente o mesmo que a versión orixinal, pero é semanticamente equivalente e inclúe os mesmos nomes de variables e funcións (BinaryAST garda nomes, pero non garda información sobre posicións no código, formato e comentarios). A outra cara da moeda é a aparición de novos vectores de ataque, pero segundo os desenvolvedores, son moito máis pequenos e controlables que cando se usan alternativas, como a distribución de bytecode.

As probas do código de facebook.com mostraron que a análise de JavaScript consome un 10-15% dos recursos da CPU e a análise leva máis tempo que a xeración de bytecode e a xeración de código inicial para JIT. No motor SpiderMonkey, o tempo para construír completamente un AST leva 500-800 ms, e o uso de BinaryAST reduciu esta cifra nun 70-90%.
En xeral, para a maioría dos fogos artificiais web, ao usar BinaryAST, o tempo de análise de JavaScript redúcese nun 3-10% no modo sen optimización e nun 90-97% cando o modo de ignorar funcións non utilizadas está activado.
Ao executar un conxunto de probas de JavaScript de 1.2 MB, o uso de BinaryAST permitiu que o tempo de inicio se acelerase de 338 a 314 ms nun sistema de escritorio (Intel i7) e de 2019 a 1455 ms nun dispositivo móbil (HTC One M8).

Fonte: opennet.ru

Engadir un comentario