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()
.
Especificaciones
Specification |
---|
WebAssembly JavaScript Interface # webassembly-namespace |
Compatibilidad con navegadores
BCD tables only load in the browser