Cloudflare, Mozilla y Facebook están desarrollando BinaryAST para acelerar la carga de JavaScript.

Los ingenieros de las empresas Cloudflare, Mozilla, Facebook y Bloomberg se les pidió nuevo formato BinaryAST para acelerar la entrega y procesamiento del código JavaScript al abrir sitios en el navegador. BinaryAST traslada la fase de análisis sintáctico al lado del servidor y proporciona un árbol de sintaxis abstracto ya formado (AST). Al recibir BinaryAST, el navegador puede pasar directamente a la etapa de compilación, omitiendo el análisis del código fuente de JavaScript.

Para las pruebas ha preparado una implementación de referencia, licenciada bajo MIT. Para el análisis se utilizan componentes de Node.js, y el código para la optimización y formación del AST está escrito en Rust. En el lado de los navegadores, el soporte
BinaryAST ya está disponible en versiones nocturnas Firefox. El codificador en BinaryAST puede usarse tanto a nivel de herramientas del sitio final como para empaquetar scripts de sitios externos en el lado de un proxy o una red de entrega de contenido. Actualmente, ya ha comenzado el proceso de estandarización de BinaryAST por parte del grupo de trabajo ECMA TC39, después de lo cual el formato podrá coexistir junto con los métodos existentes de compresión de contenido entregado, como gzip y brotli.

Cloudflare, Mozilla y Facebook están desarrollando BinaryAST para acelerar la carga de JavaScript.

Cloudflare, Mozilla y Facebook están desarrollando BinaryAST para acelerar la carga de JavaScript.

Un tiempo considerable en el procesamiento de JavaScript se dedica a la fase de carga y análisis del código. Considerando que el volumen de JavaScript cargado en muchos sitios populares se acerca a los 10 MB (por ejemplo, para LinkedIn — 7.2 MB, Facebook — 7.1 MB, Gmail — 3.9 MB), el procesamiento inicial de JavaScript introduce una demora significativa. La etapa de análisis en el navegador también se retrasa debido a la imposibilidad de construir un AST completo sobre la marcha mientras se carga el código (el navegador debe esperar a que se complete la carga de los bloques de código, por ejemplo, el final de las funciones, para obtener la información faltante necesaria para analizar los elementos actuales).

En parte, el problema se intenta resolver mediante la distribución del código en formas minimizadas y comprimidas, así como mediante la caché de código de bytes generado por el navegador. En los sitios modernos, el código se actualiza con bastante frecuencia, por lo que la caché solo resuelve parcialmente el problema. Una solución podría ser WebAssembly, pero este requiere el uso de tipificación explícita en el código y no se adapta bien para acelerar el procesamiento del código existente en JavaScript.

Otra opción es entregar código binario precompilado en lugar de scripts de JavaScript, pero los desarrolladores de los motores de los navegadores se oponen, ya que el código binario externo es difícil de verificar, su procesamiento directo puede llevar a la fragmentación de la web, se presentan amenazas adicionales a la seguridad y se requiere el desarrollo de un formato de código binario universal.

BinaryAST permite integrarse en el modelo actual de desarrollo y entrega de código sin la necesidad de crear un nuevo código binario y sin alterar el lenguaje JavaScript. El tamaño de los datos en formato BinaryAST es comparable al de un código JavaScript comprimido y minimizado, y la velocidad de procesamiento aumenta notablemente al eliminar la fase de análisis de los textos fuente. Además, el formato permite compilar a código binario durante la carga de BinaryAST, sin esperar a que se complete la recepción de todos los datos. Asimismo, el análisis del lado del servidor permite excluir del resultado entregado funciones no utilizadas y código innecesario, lo que en el análisis del lado del navegador consume tiempo tanto para el desglose como para la transferencia de tráfico innecesario.

Una característica de BinaryAST es también la capacidad de restaurar JavaScript legible que no coincide uno a uno con la versión original, pero que es semánticamente equivalente e incluye los mismos nombres de variables y funciones (BinaryAST conserva los nombres, pero no la información sobre las posiciones en el código, el formato o los comentarios). El lado negativo es la aparición de nuevos vectores para ataques, pero según los desarrolladores, son significativamente menores y más controlables que con el uso de alternativas, como la difusión de código binario.

Las pruebas de código de facebook.com han demostrado que el análisis de JavaScript consume entre el 10 y el 15% de los recursos de CPU y que el análisis lleva más tiempo que la generación de código binario y la formación inicial del código para JIT. En el motor SpiderMonkey, el tiempo de construcción total del AST es de 500 a 800 ms y la aplicación de BinaryAST ha permitido reducir esta cifra entre un 70 y un 90%.
En general, para la mayoría de los frameworks web, el uso de BinaryAST reduce el tiempo de análisis de JavaScript entre un 3 y un 10% en modo sin optimización y entre un 90 y un 97% al activar el modo de ignorar funciones no utilizadas.
Al realizar un conjunto de pruebas de JavaScript de 1.2 MB, la implementación de BinaryAST permitió reducir el tiempo de inicio de 338 a 314 ms en un sistema de escritorio (Intel i7) y de 2019 a 1455 ms en un dispositivo móvil (HTC One M8).

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster