WebAssembly
El objeto WebAssembly
de JavaScript actua como un namespace para todas las funcionalidades realcionados con WebAssembly.
A diferencia de otros objetos globales, WebAssembly
no tiene un constructor (no tiene una función para crear el objeto). Puedes ser comparado con el objeto Math
, que también es un namespace, para funciones y constantes matemáticas, o también con Intl
que es un namespace para internacionalización y otras funciones de idioma.
Descripción
Los usos primarios para el objeto WebAssembly
son:
- Cargar código WebAssembly, utilizando la función
WebAssembly.instantiate()
. - Crear nuevas instancias de memoria y de tablas mediante los constructores
WebAssembly.Memory()
/WebAssembly.Table()
. - Facilitar el manejo de errores que ocurren dentro de un WebAssembly mediante los constructores:
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
.
Métodos
WebAssembly.instantiate()
-
El API primaria para compilar e instanciar código WebAssembly, ambos regresan un
Module
y el primeroInstance
. WebAssembly.instantiateStreaming()
-
Compila e instancia un módulo WebAssembly directamente desde un flujo de origen subyacente, ambos regresan un
Module
y el primeroInstance
. WebAssembly.compile()
-
Compila un
WebAssembly.Module
desde el código binario de un WebAssembly, manteniendo la creación de la instancia como un objeto separado. WebAssembly.compileStreaming()
-
compila un
WebAssembly.Module
directamente desde un flujo de origen subyacente, manteniendo la creación de la instancia como un objeto sepraado. WebAssembly.validate()
-
Valida un arreglo con tipo de código binario de un WebAssembly, regresando si los bytes son código válido WebAssembly (
true
) o de lo contrario (false
).
Constructores
WebAssembly.Module()
-
Crea un nuevo objeto WebAssembly
Module
. WebAssembly.Instance()
-
Crear un nuevo objeto WebAssembly
Instance
. WebAssembly.Memory()
-
Crear un nuevo objeto WebAssembly
Memory
. WebAssembly.Table()
-
Crear un nuevo objeto WebAssembly
Table
. WebAssembly.CompileError()
-
Crear un nuevo objeto WebAssembly
CompileError
. WebAssembly.LinkError()
-
Crear un nuevo objeto WebAssembly
LinkError
. WebAssembly.RuntimeError()
-
Crear un nuevo objeto WebAssembly
RuntimeError
.
Ejemplos
Después de obtener algún bytecode de WebAssembly usando la sentencia fetch, nosotros compilamos e instanciamos el módulo usando la función WebAssembly.instantiate()
, importando una función de JavaScript en el WebAssembly Module en el proceso. Esta premisa resuelve a un objeto (result
) que contenga un objeto Module
compilado y un objeto Instance
. Entonces tenemos una llamada a Exported WebAssembly function que es exportada por Instance
.
var importObject = {
imports: {
imported_func: function(arg) {
console.log(arg);
}
}
};
fetch('simple.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, importObject)
).then(result =>
result.instance.exports.exported_func()
);
Nota: Ver index.html en GitHub (view it live also) para un ejemplo que hace uso de la función fetchAndInstantiate()
.