BinaryAST: un proyecto de Cloudflare, Mozilla y Facebook para acelerar la carga de JavaScript
Los ingenieros de las empresas Cloudflare, Mozilla, Facebook y Bloomberg han comenzado a trabajar en un nuevo proyecto llamado “BinaryAST” para acelerar la entrega y el procesamiento del código JavaScript al abrir sitios en los navegadores web.
BinaryAST lleva la fase de análisis sintáctico al lado del servidor y entrega un árbol de sintaxis abstracta (AST) ya generado. Al recibir BinaryAST, el navegador puede ir inmediatamente a la etapa de compilación, sin pasar por el análisis del código fuente de JavaScript.
Una implementación de referencia preparada bajo las licencias MIT ha sido preparada para pruebas.Los componentes de Node.js se utilizan para analizar el código para optimizar y generar AST, está escrito en Rust.
El codificador en BinaryAST se puede usar tanto en el nivel del kit de herramientas del sitio final como para empaquetar scripts de sitios externos en el lado del proxy o en la red de entrega de contenido.
En la actualidad, el proceso de estandarización de BinaryAST por parte del grupo de trabajo ECMA TC39 ya ha comenzado, después de lo cual el formato podrá coexistir con los métodos existentes de compresión del contenido entregado, como gzip y brotli.
Tantos archivos javascript repercute en la carga de las paginas web
Un tiempo considerable durante el procesamiento de JavaScript toma la fase de cargar y analizar el código.
Teniendo en cuenta el hecho de 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 un retraso significativo.
La etapa de análisis del lado del navegador también se ralentiza debido a la incapacidad de crear un AST al vuelo mientras se carga el código (el navegador tiene que esperar la carga de bloques de código, por ejemplo, el final de las funciones, para obtener la información que falta para analizar los elementos actuales).
Parcialmente, se intentan resolver el problema distribuyendo el código de forma minimizada y comprimida, así como almacenando en caché generado por el navegador.
Mientras que en los sitios modernos, el código se actualiza con bastante frecuencia, por lo que el almacenamiento en caché solo resuelve parcialmente el problema.
La solución podría ser WebAssembly, pero requiere el uso explícito de la escritura en el código y no está bien adaptada para acelerar el procesamiento del código JavaScript existente.
Otra opción es entregar el código compilado ya hecho en lugar de scripts de JavaScript, pero los desarrolladores del motor del navegador se oponen a él, ya que el código de terceros es difícil de verificar, su procesamiento directo puede llevar a la separación de la web, surgen amenazas de seguridad adicionales.
BinaryAST es la solución
BinaryAST permite integrarse en el modelo actual de desarrollo y entrega de código sin crear un nuevo código de bytes y sin cambiar el lenguaje JavaScript.
El tamaño de los datos en el formato BinaryAST es comparable al código de JavaScript minificado y comprimido y la velocidad de procesamiento debido a la exclusión de la fase de análisis de origen está aumentando notablemente.
Además, el formato permite compilar en bytecode como BinaryAST carga, sin esperar a que todos los datos se completen.
Una característica de BinaryAST es también la capacidad de restaurar JavaScript legible, no uno a uno que coincida con la versión original, pero es semánticamente equivalente e incluye los mismos nombres de variables y funciones (BinaryAST guarda los nombres, pero no guarda información sobre las posiciones en el código, el formato y los comentarios).
La otra cara de la moneda es la aparición de nuevos vectores para los ataques, pero según los desarrolladores, son significativamente más pequeños y más controlables que con el uso de alternativas, como la distribución de códigos de byte.
Las pruebas del código de facebook mostraron que entre el 10% y el 15% de los recursos de la CPU se gastan en el análisis de JavaScript y se tarda más en analizar que en generar el código de bytes y la generación de código inicial para JIT.
El soporte de BinaryAST ya está disponible en las versiones Nightly de Firefox.
Fuente: https://blog.cloudflare.com
El artículo BinaryAST: un proyecto de Cloudflare, Mozilla y Facebook para acelerar la carga de JavaScript ha sido originalmente publicado en Ubunlog.