Un hito de WebAssembly: soporte experimental en varios navegadores

29 mayo, 2016 2:15 por

Esta es una traducción del artículo original publicado en el blog de Mozilla Hacks. Traducción por Jordi Cuevas.

WebAssembly es un estándar emergente cuyo objetivo es definir un compilador binario seguro, portable, eficiente en tamaño y tiempo de carga, el cual ofrece un desempeño casi nativo – un CPU virtual para la web. WebAssembly está siendo desarrollado por el W3C Community Group (CG) cuyos miembros incluyen Mozilla, Microsoft, Google y Apple.

Estoy emocionado de anunciar que WebAssembly ha alcanzado un hito importante: ahora hay múltiples, interoperables implementaciones experimentales en navegadores. Aún tenemos mucho trabajo por delante en la estandarización para la implementación, pero es una buena ocasión para presentar nuestro progreso hasta ahora, hablar acerca de lo que se viene, y recibir retroalimentación.

¿Por qué WebAssembly?

El subconjunto de bajo nivel asm.js de JavaScript ha demostrado no solo que es posible para los navegadores lograr un seguro, casi nativo rendimiento computacional, sino que además existe una tremenda demanda para este tipo de capacidades en la web. Gracias a Emscripten, hemos visto que se ha usado asm.js para una diversidad de aplicaciones, en las cuales se incluyen : mapeo, criptografía, compresión, juegos, CAD, edición de imágen y reconocimiento facial.

El CG de WebAssembly se formó el año pasado para dar el siguiente paso a la web e ir más allá, con un formato binario estandarizado cuyos tamaños de almacenamiento y tiempos de decodificación pudieran ser optimizados más allá de lo que es posible con JavaScript. Adicionalmente, por ser un estándar nuevo, WebAssembly es capaz de evolucionar para adaptarse a características de bajo nivel independientemente de la evolución de JavaScript.

Al mismo tiempo sabíamos que era importante que WebAssembly fuera “de la web”: debía acceder a APIs web existentes e integrarse con JavaScript por ejemplo permitiendo llamadas entre WebAssembly y JavaScript. A diferencia de los modelos clásicos de plugins, esto permitiría a WebAssembly integrarse más fácilmente a librerías y aplicaciones JavaScript, así como asm.js ha sido capaz de hacerlo.

Finalmente, hemos sido capaces de trazarnos en nuestros años 1,2,3,4,5,6,7 de experiencia con Emscripten y asm.js para guiar y focalizar el diseño inicial de WebAssembly. Y crucialmente, con el gran desempeño del código de asm.js en los navegadores modernos, la creación de polyfills permitirá a los desarrolladores poder usar WebAssembly inclusive antes de que su implementación nativa haya llegado a saturar el mercado de los navegadores.

Progreso

El CG ha tenido un avance rápido hasta hoy en día; ha alcanzado una notable cantidad de progreso. Dentro de la organización WebAssembly en GitHub, el grupo ha producido:

Es más, ingenieros en cuatro motores de navegadores han implementado prototipos de WebAssembly 1,2,3,4. Dentro de Firefox, hemos refactorizado nuestra maquinaria de optimización de asm.js existente para utilizar el formato binario de WebAssembly como la representación de código asm.js enviado desde el subproceso de análisis principal al subproceso del compilador de fondo.

Este cambio terminó mejorando el rendimiento de compilación paralela de asm.js moviendo dos pasos costosos, MIR y generación de código, fuera de la ruta crítica secuencial. Con esta maquinaria refactorizada , la decodificación nativa de WebAssembly sólo requiere la adición de un nuevo frontend para validar los bytes en los que no se confía.

Diagrama de compilación ASM

Para las definiciones de estos términos y más información sobre JS y la compilación de asm.js, puedes ver esta entrada en el blog.

Experimentando con WebAssembly

Con todas estas piezas en su lugar, es ahora posible construir demos de WebAssembly que se ejecuten en múltiples implementaciones experimentales. Con “experimental” queremos decir: tanto el formato binario y los enlaces JS para WebAssembly probablemente cambien de manera incompatible en los próximos meses hasta que la primera versión se estabilice. No esperamos que estas implementaciones sean lo suficientemente maduras como para pruebas de estrés o rendimiento durante algún tiempo todavía. Por el contrario, la importancia de este hito es conseguir que todos los navegadores estén alineados para que podamos seguir iterando en sincronía.

Habiendo dicho esto, es muy gratificante para nosotros ver un demo real en funcionamiento que se pueda ejecutar en múltiples navegadores:

Demo Angry Bots

Este demo en particular tiene realmente un valor nostálgico: AngryBots es un proyecto – tutorial de Unity, el cual fue usado como una prueba mientras se comprobaba el WebGL export de Unity. ¡Qué buenos recuerdos! 🙂

Para ejecutar el demo , debes descargar la versión Nightly, abre about:config y cambia javascript.options.wasm a true.

Camino al lanzamiento

¿Que viene a continuación? Hay mucho más por hacer antes de que tengamos una primera versión estable. Algunas de las grandes tareas pendientes en CG son:

  • Definir el formato de texto oficial de WebAssembly.
  • Reducir más el tamaño del formato binario. Mientras que el formato binario actual es 42% más pequeño que asm.js sin comprimir (12% más pequeño después de gzip), Sabemos de trabajos anteriores con prototipos de formato binario que se puede llegar a reducir aún más su tamaño de manera notable.
  • Iterar con la API JavaScript de WebAssembly. Actualmente las implementaciones experimentales definen una única función síncrona, Wasm.instantiateModule, que realiza tanto la compilación como la instanciación. Existen planes tentativos de separar ambos pasos, y proveer ambas funciones síncronas y asíncronas que producen un objeto de código estructurado-clonable. Esto le da a los desarrolladores un mayor control sobre la compilación y el cacheo de código máquina que el actual cacheo implícito de asm.js en Firefox.
  • Crear documentación más accesible para los desarrolladores de compiladores, autores de herramientas, hackers y estudiantes.
  • Agregar más pruebas al conjunto de pruebas.

En Firefox también estamos planificando:

  • Añadir soporte WebAssembly a las herramientas del desarrollador del navegador, incluyendo el depurador y analizador. Afortunadamente, el equipo de desarrollo de herramientas de JavaScript y Firebug trabajaron de manera conjunta para migrar las herramientas a una nueva API de depuración abstracta con pruebas de unidad la cual estaremos implementando para el código WebAssembly. A decir verdad, el trabajo ya comenzó, es por eso que si abres la pestaña depurador en el ejemplo que presentamos anteriormente puedes observar un formato de texto de marcador de posición que ha sido generado por el código binario (el cual por supuesto, será reemplazado por el formato de texto oficial cuando esté listo).
  • Reducir aún más el tiempo de carga en frío. Midiendo el tiempo de compilación de AngryBots en un PC de escritorio con Linux y un core de 16×2.4 Ghz WebAssembly reduce el tiempo de compilación alrededor de un 52%. Es un buen comienzo y aprovecha el hecho de que la decodificación de WebAssembly es 10 veces más rápida que el parseo de asm.js, pero el tiempo de carga en frío puede ser reducido de manera significante trabajando en otras partes de la maquinaria de compilación.
  • Terminar de añadir el set completo de operadores de WebAssembly e importar la conjunto de pruebas.

A toda velocidad

El progreso de WebAssembly hasta ahora ha sido emocionante. Continúo impresionado y agradecido con la atmósfera de colaboración de todo el grupo y comunidad de WebAssembly. Si deseas aprender más, ingresa a la página en http://webassembly.github.io/. ¡Feliz hacking!

The following two tabs change content below.

jorgev

AMO Product Manager at Mozilla
Jorge trabaja para el equipo de complementos de Mozilla, y se dedica a Mozilla Hispano y Mozilla Costa Rica en su tiempo libre. Actualmente está encargado del blog de Mozilla Hispano Labs.

Compartir artículo:

Start the discussion at foro.mozilla-hispano.org

  • ¡Participa!

    Firefox Friends »
    Agrega botones de Firefox en tu sitio web y comparte tu amor por Mozilla Firefox.
    Ayuda a otros usuarios en Twitter.
    Colabora con la comunidad »
    En Mozilla lo importante son las personas. Descubre cómo puedes colaborar.

    Boletín Firefox

    Suscríbete al boletín de novedades de Firefox.

  • Descargas

    Descarga los programas de Mozilla.

    Lo más visto

    cc-by-sa